我从BOL中看到,您可以将权限应用于 T-SQL 同义词,但是在使用同义词时,如果您已经对基础对象授予了权限,我不清楚何时需要这样做。
例如。如果我在数据库 A 中有一个同义词指向数据库 B 中的表 FRED,那么似乎只要用户 Joe 在 [Fred].[B] 上被授予 SELECT 权限,那么 Joe 就可以执行 SELECT * FROM [Fred].[乙]。
我从BOL中看到,您可以将权限应用于 T-SQL 同义词,但是在使用同义词时,如果您已经对基础对象授予了权限,我不清楚何时需要这样做。
例如。如果我在数据库 A 中有一个同义词指向数据库 B 中的表 FRED,那么似乎只要用户 Joe 在 [Fred].[B] 上被授予 SELECT 权限,那么 Joe 就可以执行 SELECT * FROM [Fred].[乙]。
以下权限语句仅与同义词相关联,而不与基础对象相关联:(然后提到 GRANT、REVOKE;DENY)
之后,所有权链接适用。
当通过链访问对象时,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
编辑:我希望我已经回答了你的问题......