我从 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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top