use*_*755 7 t-sql sql-server stored-procedures
我有一个代理用户,我正在尝试添加到可以执行所有存储过程的角色.使用其他StackOverflow帖子,我已经能够将这个脚本放在一起
USE abc
Create ROLE db_exec
go
GRANT EXECUTE TO db_exec
go
EXEC sp_addrolemember 'db_exec', 'abc_user'
go
Run Code Online (Sandbox Code Playgroud)
当我尝试运行我的存储过程时,根据我的错误处理,我仍然会收到此错误.
对象'sp_OACreate',数据库'mssqlsystemresource',架构'sys'上的EXECUTE权限被拒绝.
我该怎么办才能abc_user执行sp_OACreate?
除了处于sysadmin角色之外,还需要在master数据库上授予执行权限,这些进程实际驻留在这些数据库中
use master
go
grant exec on sp_OACreate to abc_user
GO
Run Code Online (Sandbox Code Playgroud)
运行之后,您可以使用以下内容验证您是否有权执行该过程
SELECT *
FROM master.sys.database_permissions [dp]
JOIN master.sys.system_objects [so] ON dp.major_id = so.object_id
JOIN master.sys.sysusers [usr] ON
usr.uid = dp.grantee_principal_id AND usr.name = 'abc_user'
WHERE permission_name = 'EXECUTE' AND so.name = 'sp_OACreate'
Run Code Online (Sandbox Code Playgroud)
小智 6
给出的答案有效,但是,我们通常会尽可能不向任何用户授予系统管理员权限。在这种情况下,我发现运行sp_OACreate您实际上不需要 sysadmin 角色。
我运行了以下命令:
use master
grant exec on sp_OACreate to yourSecObject
grant exec on sp_OADestroy to yourSecObject --Optional
grant exec on sp_OAMethod to yourSecObject
Run Code Online (Sandbox Code Playgroud)
出于我的目的,我需要一个清理步骤,因此用户需要创建和销毁。
我希望这可以帮助任何想要提供运行这些过程的能力但不希望用户对服务器上的所有其他数据库具有完全数据库访问权限的人。
-斯科特