1

我在对象“xp_cmdshell”上获得执行权限被拒绝。

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

然后我通过 SQL 探查器对其进行调试,并将探查器的结果执行到查询窗口(这意味着我使用从探查器到查询窗口的必要参数运行 StoredProcedure),令人惊讶的是它工作得很好。文件已成功导出。

考虑到我在连接字符串中的登录名是所有者和管理员用户,我想知道这有什么问题。

4

3 回答 3

3

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

于 2011-12-14T21:20:55.870 回答
1

我们必须给这个用户执行权限

句法:

GRANT EXECUTE ON xp_cmdshell TO [Domain\User]

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

于 2014-02-04T20:23:19.610 回答
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 中,这应该如下所示:

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 中,这应该如下所示:

用户权限是 SSMS

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

grant execute on xp_cmdshell to SQLUSERNAME
于 2019-08-12T08:08:19.337 回答