次のコマンドを実行して、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
を使用して別の認証を渡すことはできますか?
製品ドキュメントの xp_cmdshell(Transact-SQL) から:
xp_cmdshellによって生成されたWindowsプロセスには、SQL Serverサービスアカウントと同じセキュリティ権限があります。
sysadmin固定サーバーロールのメンバーではないユーザーによって呼び出されると、xp_cmdshellは、 ## xp_cmdshell_proxy_account ##という資格情報に保存されているアカウント名とパスワード。このプロキシ資格情報が存在しない場合、xp_cmdshellは失敗します。
xp_cmdshell
プロキシアカウントを設定するために必要な手順については、エントリ全体をご覧ください。