Dav*_*ths 32 database sql-server xp-cmdshell
尝试从存储过程中执行xp_cmdshell时,我看到一条错误消息.
在实例上启用了xp_cmdshell .和执行权限被授予给我的用户,但我还是看到了异常.
对象'xp_cmdshell',数据库'mssqlsystemresource',架构'sys'上的EXECUTE权限被拒绝
部分问题是这是一个共享集群,我们在实例上有一个数据库,因此我们没有完整的管理员权限.所以我不能进入并授予权限,什么不是.
小智 55
对于不是SQL Server实例上sysadmin角色成员的用户,您需要执行以下操作以授予对xp_cmdshell扩展存储过程的访问权限.此外,如果您忘记了我列出的一个步骤,那么将会抛出错误.
启用xp_cmdshell过程
消息15281,级别16,状态1,过程xp_cmdshell,第1行SQL Server阻止访问组件'xp_cmdshell'的过程'sys.xp_cmdshell',因为此组件作为此服务器的安全配置的一部分被关闭.系统管理员可以使用sp_configure启用"xp_cmdshell".有关启用"xp_cmdshell"的详细信息,请参阅SQL Server联机丛书中的"表面区域配置".*
为具有master数据库公共访问权限的非sysadmin用户创建登录名
消息229,级别14,状态5,过程xp_cmdshell,第1行对象'xp_cmdshell',数据库'mssqlsystemresource',架构'sys'上的EXECUTE权限被拒绝.*
授予xp_cmdshell存储过程的EXEC权限
消息229,级别14,状态5,过程xp_cmdshell,第1行对象'xp_cmdshell',数据库'mssqlsystemresource',架构'sys'上的EXECUTE权限被拒绝.*
创建一个代理帐户,使用sp_xp_cmdshell_proxy_account运行xp_cmdshell
消息15153,级别16,状态1,过程xp_cmdshell,第1行xp_cmdshell代理帐户信息无法检索或无效.验证'## xp_cmdshell_proxy_account ##'凭据是否存在且包含有效信息.*
从您的错误看,似乎错过了第2步或第3步.我不熟悉群集,知道该设置是否有任何特殊之处.
nZe*_*eus 44
我想完成tchester的答案.
(1)启用xp_cmdshell过程:
-- To allow advanced options to be changed.
EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO
-- Enable the xp_cmdshell procedure
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO
Run Code Online (Sandbox Code Playgroud)
(2)为具有对master数据库的公共访问权限的非sysadmin用户创建登录"Domain\TestUser"(windows用户)
(3)授予xp_cmdshell存储过程的EXEC权限:
GRANT EXECUTE ON xp_cmdshell TO [Domain\TestUser]
Run Code Online (Sandbox Code Playgroud)
(4)创建一个代理帐户,使用sp_xp_cmdshell_proxy_account运行xp_cmdshell
EXEC sp_xp_cmdshell_proxy_account 'Domain\TestUser', 'pwd'
-- Note: pwd means windows password for [Domain\TestUser] account id on the box.
-- Don't include square brackets around Domain\TestUser.
Run Code Online (Sandbox Code Playgroud)
(5)向用户授予控制服务器权限
USE master;
GRANT CONTROL SERVER TO [Domain\TestUser]
GO
Run Code Online (Sandbox Code Playgroud)