web-dev-qa-db-ja.com

xp_cmdshellを介してコマンドを実行する場合、どのユーザーがシステムにコマンドを発行しますか?

次のコマンドを実行して、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

どのユーザーがコマンドを実行するのか不思議です。私がデータベースにログイン/接続したユーザーですか?それとも、ユーザーImが物理サーバーにログオンしたのですか? xp_cmdshellを使用して別の認証を渡すことはできますか?

4

製品ドキュメントの xp_cmdshell(Transact-SQL) から:

xp_cmdshellによって生成されたWindowsプロセスには、SQL Serverサービスアカウントと同じセキュリティ権限があります。

sysadmin固定サーバーロールのメンバーではないユーザーによって呼び出されると、xp_cmdshellは、 ## xp_cmdshell_proxy_account ##という資格情報に保存されているアカウント名とパスワード。このプロキシ資格情報が存在しない場合、xp_cmdshellは失敗します。

xp_cmdshellプロキシアカウントを設定するために必要な手順については、エントリ全体をご覧ください。

7
tpet