我想保护对表中行的访问。问题是我需要连接数据库和不同模式之间的数据。当我的数据在一个数据库和模式中时,我可以或多或少地处理它。当问题需要从具有不同所有者的其他数据库和模式中获取数据时,问题就从视图开始。
我创建了一个表格,我根据登录信息授予了对数据的访问权限
像这样: PermissionTab
Depid Login
1 Login1
2 Login1
3 Login1
4 Login2
5 Login3
6 Login4
7 Login5
1 Login6
2 Login6
3 Login6
4 Login6
5 Login6
我已经在模式中设置数据CDN,TBC,dbo和Optima无法访问(这些模式有不同的所有者CDN - CDN - 其余的dbo)。我创建了架构Qlik(dbo所有者)(用户可以访问),其中是从表中获取数据的视图(在不同的模式中)。 为了在我的视图中获得行级安全性,我添加了类似的内容。
Where dv.DepId in (Select DepId From Qlik.PermissionTab Where Login=USER_NAME() ) OR
IS_ROLEMEMBER('db_owner') = 1 OR
IS_SRVROLEMEMBER('sysadmin') = 1
这些视图也必须连接到许多数据库。
这是一个示例视图 [Qlik]。[DekretPomocniczyView] 选择*来自 [CDN]。[DekretyNag] DeN_DeNId = DeE_DeNId上的内连接[CDN]。[DekretyElem] 左外连接[CDN]。[DekretyKonta]关于DeE_DeEId = DeK_DeEId 在DeK_AccId = Acc_AccId
左外连接Aplikacja.Qlik.MPKKontaViewWhere (DepId in (Select DepId From Aplikacja.Qlik.PermissionTab Where
Login=USER_NAME() ) OR IS_ROLEMEMBER('db_owner') = 1 OR
IS_SRVROLEMEMBER('sysadmin') = 1
我发现无法使用模式获取行级权限并在表之间进行连接。通常,来自一个数据库的视图连接到另一个数据库中的视图,该数据库也从另一个数据库获取数据。
因为问题对我来说很紧迫,经过多次测试后我发现我可以使用角色并仅将权限设置为特定视图而不是模式来获得效果。现在(在我问过这个问题之后)我想知道我是否可以使用模式获得它,如果我的模型是正确和安全的。这是SQL 2012。