Когда вам нужно применить разрешения к синониму
-
05-07-2019 - |
Вопрос
Я вижу из Бол что вы можете применять разрешения к синониму T-SQL, но, играя с синонимами, я не понимаю, когда вам нужно будет это сделать, если у вас уже есть разрешения GRANTed для базового объекта.
например.Если у меня есть синоним в базе данных A, который указывает на таблицу FRED в базе данных B, то получается, что пока пользователю Джо предоставлено право SELECT на [Fred].[B], тогда Джо может выполнить SELECT * FROM [Fred].[ Б].
Решение
Использование синонимов (движок базы данных)
Следующие заявления о разрешениях ассоциируются только с синонимом а не базовый объект:(затем упоминает GRANT, REVOKE;ОТРИЦАТЬ)
После этого, цепочка владения применяется.
При доступе к объекту через строка, 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
Редактировать:Надеюсь, я ответил на ваш вопрос...