Sql-Server

通過 xp_cmdshell 執行命令時,哪個使用者向系統發出命令?

  • April 30, 2016

我正在執行以下命令以從 SQL Server 的儲存過程中停止遠端伺服器上的服務。

----------------
-- Stop Service
----------------
SET @Command = 'sc \\' + @Server + ' stop ' + @ServiceName;
EXEC master.dbo.xp_cmdshell @Command;

根據服務,有時這會成功執行,但有時我會收到以下錯誤:

[SC] OpenService FAILED 5:
NULL
Access is denied.
NULL
NULL

我很好奇是什麼使用者執行了命令。是我登錄/連接到數據庫的使用者嗎?或者是我登錄到物理伺服器的使用者?我可以通過不同的身份驗證xp_cmdshell嗎?

來自產品文件中的xp_cmdshell (Transact-SQL) :

xp_cmdshell生成的 Windows 程序與 SQL Server 服務帳戶具有相同的安全權限。

當不是sysadmin固定伺服器角色成員的使用者呼叫它時,xp_cmdshell使用儲存在名為**##xp_cmdshell_proxy_account##**的憑據中的帳戶名和密碼連接到 Windows 。如果此代理憑據不存在,xp_cmdshell 將失敗。

有關設置xp_cmdshell代理帳戶所需執行的步驟,請參閱完整條目。

引用自:https://dba.stackexchange.com/questions/137041