если у объекта нет записи в sys.database_permissions, все его разрешения считаются «GRANT»? - PullRequest
0 голосов
/ 03 июня 2010

Допустим, у меня есть функция, доступ к которой есть во многих хранимых процедурах.Если эта функция не имеет записей в sys.database_permissions, будет ли какая-либо учетная запись, которая может запускать один из сохраненных процедур, автоматически запускать функцию?

Этот запрос я использую:

 exec sp_depends 'dbo.theFunction' 

 -- for each object in those results, run this query

 select *  
 from sys.database_permissions dp
 where 
 grantee_principal_id=USER_ID('theAccount')
 and 
 major_id=object_id('dbo.theFunction')
 and minor_id=0
 and ( state_desc = 'GRANT' or state_desc = 'SELECT' ) 

1 Ответ

1 голос
/ 03 июня 2010

Никогда не существует неявного гранта, ни на что. Как работает «таблица, доступная из хранимой процедуры» или «функция, доступная из хранимой процедуры», обычно цепочка владения :

Когда доступ к нескольким объектам базы данных друг с другом последовательно, последовательность известен как цепь. [...] Когда объект доступен через SQL Server сначала сравнивает владелец объекта владельцу вызывающий объект. Это предыдущая ссылка в цепочке. Если оба объекты имеют одного и того же владельца, разрешения на указанный объект не оцениваются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...