4

我从BOL中看到,您可以将权限应用于 T-SQL 同义词,但是在使用同义词时,如果您已经对基础对象授予了权限,我不清楚何时需要这样做。

例如。如果我在数据库 A 中有一个同义词指向数据库 B 中的表 FRED,那么似乎只要用户 Joe 在 [Fred].[B] 上被授予 SELECT 权限,那么 Joe 就可以执行 SELECT * FROM [Fred].[乙]。

4

1 回答 1

5

使用同义词(数据库引擎)

以下权限语句仅与同义词相关联,而不与基础对象相关联:(然后提到 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

编辑:我希望我已经回答了你的问题......

于 2009-07-30T11:14:16.290 回答