SQL Server 架构安全

Jas*_*tts 2 schema sql-server-2008 security

我公司使用的是多租户数据库(一个数据库,所有表都有一个customerID字段)。

我们正在建立数据仓库并为客户提供直接访问权限。我们对架构的最初想法是为每个客户创建一个架构,每个架构中的视图提供按客户 ID 进行过滤的视图。

IE

主数据库

dbo.Table1

架构 1

schema1.Table1 (View) Select * from dbo.Table1 where custId = '1'

这是有效的,除了具有 schema1 权限的用户也可以从 dbo.Table1 中选择全部。我想防止这种情况。

那可能吗?

mrd*_*nny 5

是的。只需向您创建的用户授予仅对视图而非表的 SQL Server SELECT 权限即可。

您实际上可以通过一个视图完成所有这些工作。

创建一个根据用户名查找 CustomerId 的函数。然后将该函数作为视图的一部分调用。

create view YourView as 
select * 
from YourTable where CustomerID = dbo.YourFunction(suser_sname())
Run Code Online (Sandbox Code Playgroud)