对象xp_cmdshell上的权限被拒绝

时间:2011-12-14 21:07:43

标签: sql permission-denied xp-cmdshell

我收到对象'xp_cmdshell'上的执行权限被拒绝。

这是情况,我有一个名为ExportFile的存储过程。 我通过SqlCommand从虚拟PC的Web应用程序调用存储过程。 在执行此命令期间,我得到权限错误

然后我通过SQL profiler调试它并将探测器中的结果执行到查询窗口(这意味着我运行带有从探查器到查询窗口的必要参数的StoredProcedure)并且令人惊讶的是它的工作正常。文件已成功导出。

我想知道这是错误的,因为我在连接字符串中的登录是所有者和管理员用户。

3 个答案:

答案 0 :(得分:3)

与Web服务器一起使用的SQL用户帐户无权使用该扩展过程。您必须提升该用户的权限(坏主意)或在SQL安全性中分配一个代理帐户,该帐户可以在服务器中执行该过程,而不会将该Web帐户设置为系统管理员。

答案 1 :(得分:1)

我们必须为此用户授予执行权限

语法:

GRANT EXECUTE ON xp_cmdshell TO [Domain\User]

注意:确保您必须使用您授予执行权限的登录名。我发现用户多次使用diff id并抱怨。

答案 2 :(得分:0)

假设您收到类似

的消息
The EXECUTE permission was denied on the object 'xp_cmdshell', database 'mssqlsystemresource', schema 'sys'.

然后,您首先需要一个SQL Server用于访问主机操作系统的代理用户。

  1. 设置代理用户
execute sp_xp_cmdshell_proxy_account 'DOMAIN\USER', 'PASSWORD'

在SQL Server Management Studio中,它应如下所示:

Proxy user in SSMS

  1. 确保将SQL用户(不是代理用户)映射到主数据库
use [master]
go

execute sp_addrolemember 'public', SQLUSERNAME;
execute sp_addrolemember 'db_datareader', SQLUSERNAME;
execute sp_addrolemember 'db_datawriter', SQLUSERNAME;

在SQL Server Management Studio中,应如下所示:

User permissions is SSMS

  1. 授予执行权限,以便SQL用户可以使用代理访问操作系统功能
use [master]
go

grant execute on xp_cmdshell to SQLUSERNAME