use*_*901 6 sql-server stored-procedures
我对执行存储过程所需的权限有点困惑。例如,如果您有2个表和一个从Table1读取数据并将数据插入Table2的存储过程,那么对存储过程的执行权限和对表的选择权限就足够了吗?从理论上讲,我发现这是作为解决方案给出的,但实际上我发现用户需要对存储过程的执行权限、对表的选择权限和对 Table2 的插入权限。
不,您不需要对 Table1 和 Table2 授予显式权限,这是在存储过程中嵌入代码的目标之一,也是封装功能生效的地方。
请查看以下 Microsoft 链接:
存储过程执行
存储过程利用所有权链接来提供对数据的访问,因此用户不需要具有访问数据库对象的显式权限。当顺序访问彼此的对象由同一用户拥有时,存在所有权链。例如,一个存储过程可以调用其他存储过程,或者一个存储过程可以访问多个表。如果执行链中的所有对象都具有相同的所有者,则 SQL Server 只检查调用者的 EXECUTE 权限,而不检查调用者对其他对象的权限。因此,您只需授予对存储过程的 EXECUTE 权限;您可以撤销或拒绝对基础表的所有权限。
使用以下代码授予执行权限:
USE database_name
GO
GRANT EXECUTE ON USP_NAME
TO User_name;
GO
Run Code Online (Sandbox Code Playgroud)
以上希望有所帮助。
| 归档时间: |
|
| 查看次数: |
1646 次 |
| 最近记录: |