假设我有一个在许多存储过程中访问的函数。如果该函数在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' )
答案 0 :(得分:1)
在任何事情上都没有隐含的GRANT。 “从存储过程访问的表”或“从存储过程访问的函数”的工作原理通常是ownership chaining:
当多个数据库对象访问时 相继顺序,顺序 被称为连锁店。 [...]通过a访问对象时 链,SQL Server首先比较一下 拥有者的对象的所有者 调用对象。这是 链中的上一个链接。如果两者 对象拥有相同的所有者, 对引用对象的权限 没有评估。