Когда вам нужно применить разрешения к синониму - PullRequest
4 голосов
/ 30 июля 2009

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

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

1 Ответ

5 голосов
/ 30 июля 2009

Использование синонимов (компонент Database Engine)

следующие заявления о разрешении связаны только с синонимом а не базовый объект: (тогда упоминается 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

Редактировать: Надеюсь, я ответил на ваш вопрос ...

...