我想保护对表中行的访问。问题是我需要连接到数据库和不同模式之间的数据。当我的数据在一个数据库和模式中时,我或多或少可以处理它。当视图需要从具有不同所有者的其他数据库和模式中获取数据时,问题就始于视图。
我创建了一个表,我根据登录情况授予对数据的访问权限
像这样:PermissionTab
登录
1 登录1
2 登录1
3 登录1
4 登录2
5 登录3
6 登录4
7 登录5
1 登录6
2 登录6
3 登录6
4 登录6
5 登录6
我已经在模式 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] 内部连接 [CDN].[DekretyElem] 在 DeN_DeNId=DeE_DeNId 左侧 外部连接 [CDN].[DekretyKonta] 在 DeE_DeEId=DeK_DeEId 左侧DeK_AccId=Acc_AccId 上的外部连接 Aplikacja.Qlik.MPKKontaView
Where (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。