Когда вам нужно применить разрешения к синониму

StackOverflow https://stackoverflow.com/questions/1205782

  •  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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top