当通过 xp_cmdshell 执行命令时,什么用户向系统发出命令?

Pro*_*eur 4 sql-server-2008 sql-server remote xp-cmdshell

我正在执行以下命令以从 SQL Server 中的存储过程中停止远程服务器上的服务。

----------------
-- Stop Service
----------------
SET @Command = 'sc \\' + @Server + ' stop ' + @ServiceName;
EXEC master.dbo.xp_cmdshell @Command;
Run Code Online (Sandbox Code Playgroud)

根据服务,有时这会成功执行,但有时我会收到以下错误:

[SC] OpenService FAILED 5:
NULL
Access is denied.
NULL
NULL
Run Code Online (Sandbox Code Playgroud)

我很好奇什么用户执行命令。是我登录/连接到数据库的用户吗?或者是我登录物理服务器的用户?我可以通过不同的身份验证xp_cmdshell吗?

tpe*_*pet 7

来自产品文档中的xp_cmdshell (Transact-SQL)

xp_cmdshell生成的 Windows 进程与 SQL Server 服务帐户具有相同的安全权限。

当它由不是sysadmin固定服务器角色成员的用户调用时,xp_cmdshell使用存储在名为##xp_cmdshell_proxy_account##的凭据中的帐户名和密码连接到 Windows 。如果此代理凭据不存在,xp_cmdshell 将失败。

有关设置xp_cmdshell代理帐户所需的步骤,请参阅完整条目。