Tim*_*Tim 5 sql-server permissions sql-server-2008-r2 view owner
客户要求我实施一些用于报告目的的视图,这些视图将通过 PowerBI、Excel 和 SSRS 访问。指定的用户将只能访问该视图,并且该用户必须不能使用任何基础表。
我遇到的问题是视图中的 SQL 涉及 3 个不同的模式(都在同一个数据库中):
观点是:
CREATE VIEW dbo.vTestPermissions
AS
SELECT a.Column1,
b.Column1,
c.Column1
FROM Pupil.Table1 a
JOIN Provider.Table2 b ON a.Column1 = b.Column1
JOIN Security.Table3 c ON a.Column1 = c.Column1
Run Code Online (Sandbox Code Playgroud)
表/视图的所有者如下:
当我从视图中选择时,出现错误:
对象“table3”、数据库“TEST”、架构“Security”的 SELECT 权限被拒绝
我曾尝试在SELECT
有和没有GRANT
模式和表选项的情况下授予权限,但这使用户可以使用基础表。
对此的任何帮助将不胜感激。
如果视图和表都具有相同的所有者,则授予视图的选择权限就足够了。这称为所有权链:
当通过链访问对象时,SQL Server 首先将该对象的所有者与调用对象的所有者进行比较。这是链条中的前一个环节。如果两个对象具有相同的所有者,则不会评估所引用对象的权限。
当对象有不同的所有者时,所有权链不起作用。
因此,最简单的答案是更改表的所有权以匹配视图:
ALTER AUTHORIZATION ON Pupil.Table1 TO dbo;
ALTER AUTHORIZATION ON Provider.Table2 TO dbo;
ALTER AUTHORIZATION ON Security.Table3 TO dbo;
Run Code Online (Sandbox Code Playgroud)
在视图上授予选择:
GRANT SELECT ON dbo.vTestPermissions TO USER = 'your_user';
Run Code Online (Sandbox Code Playgroud)
...然后将允许通过所有权链接通过视图进行访问,同时防止直接表访问。
如果这不适合您的需求,我们将需要考虑更复杂的安排。
归档时间: |
|
查看次数: |
1181 次 |
最近记录: |