PRB: エラー 1314: Non-SA ユーザーとして実行したとき xp_cmdshell によって発せられるエラー

現象

SA 以外のアカウントとして SQL Server にログオンしたときに、xp_cmdshell を通じてオペレーティング システムのジョブを実行すると、次のエラーを受け取ります。
Msg 50001, Level 1, State 50001

xpsql.c: Error 1314 from LogonUser on line 476

一方、次のエラーを受け取ることもあります。
Msg 50001, Level 1, State 50001

xpsql.c: Error 1314 from CreateProcessAsUser on line 492

原因

SYMPTOMS の項に一覧表示されるエラーは、MSSQLServer が実行している SQLAgentCmdExec Windows NT アカウントに設定されている権限が誤っているために発せられたものです。

回避策

MSSQLServer サービスが実行している Windows NTアカウントが、サーバーにおけるローカル管理者グループのメンバーであることを確認してください。


MSSQLServer サービスが実行しているアカウントに、次の有効なユーザー権限があることを確認してください。

オペレーティング システムの一部として機能
クォータの増加
さらに、ローカルの SQLAgentCmdExec アカウントが持つ次の権限が、オンに設定されていることを確認してください。

バッチ ジョブとしてログオン

詳細

Xpsql.c は、製品に同梱されているサンプル コードに収められています。Win32 API 機能である LogonUser() に対する呼び出しが失敗した場合、476 行のエラーが発せられます。CreateProcessAsUser() に対する呼び出しが失敗した場合、492 行のエラーが発せられます。


このエラーは、これらの機能を呼び出すアカウントにログインを完了させるユーザー権限がないことを示します。そのため、多くの顧客は、SQLAgentCmdExec アカウントのアカウント権限を取り消すか、または User マネージャもしくは SQL Enterprise Manager を使用してアカウントを再作成することになります。


しかし、これらのエラーを発している原因は API コール (Sqlservr.exe) を呼び出しているプロセスです。したがって、不適切で不十分な権限を保持しているのは、MSSQLServer サービスが実行しているアカウントです。LogonUser() を正常に実行するには、MSSQLServer アカウントに有効な SE_TCB_NAME (オペレーティング システムの一部として動作する) 権限を与える必要があります。CreateProcessAsUser() を正常に実行するには、MSSQLServer アカウントに有効な SE_INCREASE_QUOTA_NAME (割り当てを増やす) 権限を与える必要があります。


注意 : ある種類のプロセスに関しては、CreateProcessAsUser() も、SE_ASSIGNPRIMARYTOKEN_NAME (プロセス レベルのトークンを置き換える) をオンに設定することが必要な場合があります。

詳細

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID
248391 (最終更新日 2000-01-11) をもとに作成したものです。


プロパティ

文書番号:248391 - 最終更新日: 2004/09/27 - リビジョン: 1

フィードバック