我在尝试从存储过程中执行xp_cmdshell时看到一条错误消息。
在实例上启用了xp_cmdshell。执行权限已授予我的用户,但我仍然看到异常。
对象'xp_cmdshell',数据库'mssqlsystemresource',架构'sys'上的EXECUTE权限被拒绝
部分问题是这是一个共享集群,我们在实例上有一个数据库,因此我们没有完整的管理员权限。所以我不能进入并授予权限,什么不是。
对于不是SQL Server实例上sysadmin角色成员的用户,您需要执行以下操作以授予对xp_cmdshell扩展存储过程的访问权限。此外,如果您忘记了我列出的一个步骤,那么将会抛出错误。
从您的错误看,似乎错过了第2步或第3步。我不熟悉群集,知道该设置是否有任何特殊之处。
我想完成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
(2)为具有对master数据库的公共访问权限的非sysadmin用户创建登录“Domain \ TestUser”(windows用户)
(3)授予xp_cmdshell存储过程的EXEC权限:
GRANT EXECUTE ON xp_cmdshell TO [Domain\TestUser]
(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.
(5)向用户授予控制服务器权限
USE master;
GRANT CONTROL SERVER TO [Domain\TestUser]
GO
特切斯特说:
(2)为具有对master数据库的公共访问权限的非sysadmin用户创建登录
我去了我的用户的数据库列表(服务器/安全/连接/我的用户名/属性/用户映射,并且想要检查master数据库的框。我收到一条错误消息,告诉用户已存在于master数据库中。要掌握数据库,删除用户,返回“用户映射”并选中主框。检查下面的“公共”框。
之后,您需要在xp_cmdshell上重新发出grant grant to“my user name”
伊夫
扩展通过SQL Server代理自动将数据作为csv导出到网络共享所提供的内容。
(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
(2)为具有对master数据库的公共访问权限的非sysadmin用户创建登录“Domain \ TestUser”(windows用户)。通过用户映射完成
(3)以批处理作业登录:导航到本地安全策略 - >本地策略 - >用户权限分配。将用户添加到“以批处理作业登录”
(4)为domain \ user提供网络文件夹的读/写权限
(5)授予xp_cmdshell存储过程的EXEC权限:
GRANT EXECUTE ON xp_cmdshell TO [Domain\TestUser]
(6)创建一个代理帐户,使用sp_xp_cmdshell_proxy_account运行xp_cmdshell
EXEC sp_xp_cmdshell_proxy_account 'Domain\TestUser', 'password_for_domain_user'
(7)如果sp_xp_cmdshell_proxy_account命令不起作用,请手动创建它
create credential ##xp_cmdshell_proxy_account## with identity = 'Domain\DomainUser', secret = 'password'
(8)启用SQL Server代理。打开SQL Server配置管理器,导航到SQL Server服务,启用SQL Server代理。
(9)创建自动化作业。打开SSMS,选择“SQL Server代理”,然后右键单击“作业”并单击“新建作业”。
(10)选择“所有者”作为您创建的用户。选择“Steps”,使“type”= T-SQL。填写类似于下面的命令字段。将分隔符设置为“,”
EXEC master..xp_cmdshell 'SQLCMD -q "select * from master" -o file.csv -s ","
(11)相应填写时间表。