データベーストリガー内でxp_cmdshellを使用して、exeファイルを起動しています。
xp_cmdshellが有効になっています(「echo」のような単純なcmdコマンドを実行できます)。しかし、xp_cmdshellを介してexeを起動しようとすると、アクセスが拒否されます。
私はデータベース管理者です。そして、cmdを介してexeを直接起動できます。なぜ私が拒否されるのか、そしてそれを修正する方法を知っている人はいますか?
データベーストリガー内でxp_cmdshellを使用して、exeファイルを起動しています。
xp_cmdshellが有効になっています(「echo」のような単純なcmdコマンドを実行できます)。しかし、xp_cmdshellを介してexeを起動しようとすると、アクセスが拒否されます。
私はデータベース管理者です。そして、cmdを介してexeを直接起動できます。なぜ私が拒否されるのか、そしてそれを修正する方法を知っている人はいますか?
xp_cmdshellを使用して「whoami」を実行し、exeファイルおよびアクセスするリソースで指定されたユーザーの有効なアクセス許可を確認します。xp_cmdshellを介してプロセスを実行するためにlocalsystemのようなアカウントが使用されている可能性があります。
EXEC xp_cmdshell 'whoami'
NTFSアクセス許可が不十分である可能性があります。SQL Serverが実行されている「ユーザーアカウント」に、*。EXE(および依存ファイル)へのアクセス許可(読み取り+実行)があることを確認してください。
確かではありませんが、トリガーは、トリガーを「トリガー」したSQLコマンドを実行しているユーザーによって実行されていると思います。
SQLコマンドを発行しているユーザーはWindowsユーザーですか、それともSQLユーザーですか?SQLユーザーの場合は、「SQLプロキシ」を設定する必要があります。SQLプロキシは、ファイルシステムへのアクセスに使用されるWindowsユーザーをSQLに通知するために使用されます。
お役に立てれば、
イヴ
BCPを実行してからCOPYを実行しようとすると、ACCESSDENIEDが発生していました。
私が見つけたのは、xp_cmdshellがc:\ windows\system32で始まるということです
CMDファイルを変更して作業フォルダーに変更しました
L:cd L:\ myworkingfolder
これで問題は解決しました。sqlagentはローカル管理者であり、コピーコマンドをフルパスで実行していましたが、イベントです。
今すぐ貢献する時間です。私はsysadminの役割で、2人のパブリックアクセスユーザーにxp_cmdshellを実行させる作業をしました。xp_cmdshellは実行できますが、2人のユーザーは実行できません。
私は次の手順を実行しました。
新しい役割を作成します。
マスターを使用CREATEROLE[CmdShell_Executor] AUTHORIZATION [dbo] GRANT EXEC ON xp_cmdshell TO [CmdShell_Executor]
マスターデータベースにユーザーを追加します:[セキュリティ]->[ユーザー]。メンバーシップは、作成されたばかりの[CmdShell_Executor]のみをチェックします
プロキシアカウントを設定します。
EXEC sp_xp_cmdshell_proxy_account'domain \ user1'、'users1Windowsパスワード'EXEC sp_xp_cmdshell_proxy_account'domain \ user2'、'users2Windowsパスワード'
次に、両方のユーザーが、Rスクリプトの実行を呼び出すxp_cmdshellを含むストアドプロシージャを実行できます。ユーザーにパスワードを入力させ、1行のコードを実行してから、パスワードを削除します。すべて私のPCにあります。
Access is denied.
実行可能ファイルへのパスを正しく指定しない場合にも取得できます。パスにスペースが含まれている場合は、実行可能ファイルを二重引用符で囲む必要があることに注意してください。
EXEC xp_cmdshell '"D:\My path\With spaces\runme.exe"'
私は同じ問題を抱えていて、次のように解決しました: