我从BOL看到你可以对T-SQL同义词应用权限,但是在玩同义词的时候我不清楚你是否需要这样做,如果你已经获得了对基础的GRANTed权限对象
例如。如果我在数据库A中有一个同义词指向数据库B中的表FRED,那么只要用户Joe在[Fred]上被授予SELECT。[B]那么Joe就可以执行SELECT * FROM [Fred]。[ B]。
答案 0 :(得分:5)
Using Synonyms (Database Engine)
以下权限声明 仅与同义词相关联 而不是基础对象:(然后提到GRANT,REVOKE; DENY)
之后,ownership chaining适用。
通过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
编辑:我希望我已经回答了你的问题...