我收到对象'xp_cmdshell'上的执行权限被拒绝。
这是情况,我有一个名为ExportFile的存储过程。 我通过SqlCommand从虚拟PC的Web应用程序调用存储过程。 在执行此命令期间,我得到权限错误
然后我通过SQL profiler调试它并将探测器中的结果执行到查询窗口(这意味着我运行带有从探查器到查询窗口的必要参数的StoredProcedure)并且令人惊讶的是它的工作正常。文件已成功导出。
我想知道这是错误的,因为我在连接字符串中的登录是所有者和管理员用户。
答案 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用于访问主机操作系统的代理用户。
execute sp_xp_cmdshell_proxy_account 'DOMAIN\USER', 'PASSWORD'
在SQL Server Management Studio中,它应如下所示:
use [master]
go
execute sp_addrolemember 'public', SQLUSERNAME;
execute sp_addrolemember 'db_datareader', SQLUSERNAME;
execute sp_addrolemember 'db_datawriter', SQLUSERNAME;
在SQL Server Management Studio中,应如下所示:
use [master]
go
grant execute on xp_cmdshell to SQLUSERNAME