SQL Server 存储过程权限

Eri*_*ith 3 sql-server stored-procedures

我知道可以将存储过程的执行权限设置为数据库角色或用户。我的问题是,如何确定对 SP 访问的任何表的访问权限?调用 SP 的主体是否也必须对 SP 接触的底层对象具有必要的权限?

Eri*_*ith 9

只需确保SP和SP访问的对象都具有相同的所有者(所有权链接规则)——那么SQL Server就不会查看链接对象的权限。来自在线 SQL Server 文档:

存储过程利用所有权链接来提供对数据的访问,因此用户不需要具有访问数据库对象的显式权限。当顺序访问彼此的对象由同一用户拥有时,存在所有权链。例如,一个存储过程可以调用其他存储过程,或者一个存储过程可以访问多个表。如果执行链中的所有对象都具有相同的所有者,则 SQL Server 只检查调用者的 EXECUTE 权限,而不检查调用者对其他对象的权限。因此,您只需授予对存储过程的 EXECUTE 权限;您可以撤销或拒绝对基础表的所有权限。