2009-07-30 2 views
3

Я вижу от BOL, что вы можете применять разрешения к синониму T-SQL, но при игре с синонимами я не понимаю, когда вам нужно будет это сделать, если у вас есть уже предоставлены разрешения GRANTed для базового объекта.Когда вам нужно применить разрешения к синониму

например. Если у меня есть синоним в базе данных A, который указывает на таблицу FRED в базе данных B, то оказывается, что до тех пор, пока пользователю Joe предоставляется SELECT на [Fred]. [B], тогда Джо может сделать SELECT * FROM [Fred]. [ Б].

ответ

3

Using Synonyms (Database Engine)

Следующие операторы разрешений связаны только с синоним , а не базового объекта: (затем упоминает GRANT, REVOKE; ОТРИЦАТЬ)

После этого ownership chaining применяется.

Когда объект доступен через цепочке, 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 

Edit: Я надеюсь, что я ответил на ваш вопрос ...