您何时需要将权限应用于同义词
-
05-07-2019 - |
题
我从 BOL 中看到,您可以将权限应用于T-SQL的同义词,但在使用同义词时,如果您已经对基础对象具有GRANTed权限,那么我不清楚何时需要这样做。
例如。如果我在数据库A中有一个指向数据库B中的表FRED的同义词,那么只要用户Joe在[Fred]上被授予SELECT。[B]那么Joe就可以执行SELECT * FROM [Fred]。[ B]。
解决方案
以下权限声明 仅与同义词相关联 而不是基础对象:(然后提到GRANT,REVOKE; DENY)
之后,所有权链接适用。
通过a访问对象时 链,SQL Server首先比较一下 拥有者的对象的所有者 调用对象。这是 链中的上一个链接。如果两者 对象拥有相同的所有者, 对引用对象的权限 没有评估。
CREATE SYNONYM dbo.FooBar FOR dbo.MyBaseProc
GO
GRANT EXECUTE ON dbo.FooBar TO MyUser
GO
REVOKE EXECUTE ON dbo.MyBaseProc TO MyUser
GO
EXEC AS USER = 'MyUser'
GO
PRINT '1'
EXEC dbo.MyBaseProc --fail
GO
PRINT '2'
EXEC dbo.bob --pass
GO
REVERT
GO
DENY EXECUTE ON dbo.MyBaseProc TO MyUser
GO
PRINT '3'
EXEC AS USER = 'MyUser'
GO
EXEC dbo.bob --pass, 'coz DENY aint checked...
GO
REVERT
GO
编辑:我希望我已经回答了你的问题...
不隶属于 StackOverflow