ネットワークドライブをマウントしてからリモートのmdbファイルにアクセスするためにxp_cmdshell(TSQLプロシージャ)を実行したいと思います。
私はMS SQLサーバーの管理者であり、それに応じてxp_cmdshellの実行を許可しています。
ただし、まだ問題があります。
Xp_cmdshellを呼び出すと、コマンドを実行するユーザーはSQLSysAdmin、つまりSQL Serverプロセスを実行するアカウントになります。
xp_cmdshellは、SQLサーバーに接続しているアカウント、つまりAdministratorとして実行します
これらのアカウントはどちらも管理者グループ、SQLAdminグループにあり、CONTROL SERVERに付与されています。両方のユーザーが同じドメインに属しています。これはすべて同じマシンで実行されます。
この競合のため、SysAdmin用にマウントされており、Administrator用ではないため、ネットワークドライブを使用できません。
sp_ xp_ cmdshell_ proxy_ accountを使用して、実行するアカウントを指定しようとしましたxp_cmdshellですが、SysAdminはまだ使用されているアカウントです。
したがって、このコード:select user_name(), suser_name;
exec xp_cmdshell 'echo %username%';
ディスプレイ:Administrator Administrator
SysAdmin
xp_cmdshellコマンドを偽装する方法を誰かが知っていますか? (再)設定するものはありますか?
ご協力いただきありがとうございます。
SysadminグループのログインとしてSQLに接続しているため、xp_cmdshell
はサービスアカウントとして実行されます。
低い特権のログインとして接続すると、代わりにxp_cmdshell_proxy_account
が使用されます。ですから、最初にEXECUTE AS LOGIN='lowprivaccount'
を試して、それが役立つかどうかを確認してください。
もちろん、あなたが実際に求めているのは、期待される用途ではありません。期待される用途は、高特権アカウントがxp_cmdshell
にサービスアカウントの使用を許可することですが、他のすべての人はより低い特権のプロキシアカウントに耐える必要があります。
私は実際には過去にこの方法を使用してネットワーク共有で同様のことをしなければなりませんでした、これを試してください...
-ドライブをマップして永続化します。
xp_cmdshell "Net Use t:\\ <server>\<share> <password>/user:<username>/persistent:yes"
-tドライブを利用するt-sqlコード
-ドライブマッピングを削除しますxp_cmdshell "Net Use t:/ delete"
sQLサービスの開始時に実行するジョブを実際に設定して、このドライブをマップするようにできるので、SQLが実行されている限り、常に共有にアクセスできます。ドライブをマップするsprocをセットアップし、ドライブの初期マッピングを実行させ、sp_procoption( http://msdn.Microsoft.com/en-us/library/ ms181720.aspx )
PsExecを試してみませんか?このURLでファイルをダウンロードし、%Path%環境変数のフォルダーメンバーにコピーします。
http://technet.Microsoft.com/en-us/sysinternals/bb897553.aspx
exec xp_cmdshell 'psexec -u Administrator -p password Net Use ...'
このページは、ドメインアカウントを実際に追加してリンクするプロセスのギャップを埋めるのに役立つことがわかりました。
http://sqlblog.com/blogs/tibor_karaszi/archive/2007/08/23/xp-cmdshell-and-permissions.aspx
Xp_cmdshell内でユーザー名とパスワードを使用して「Net Use」を試すことができます。これにより、UNCへの接続の資格情報が確立されます。
ただし、これがどのくらい続くかはわかりません。それが無期限に持続する場合(たとえば、サーバーの再起動まで)、「Net Use」を実行し、後で使用できるようにするスタートアップストアドプロシージャがある可能性があります。
(MDBファイルにアクセスするための)後続のxp_cmdshellでは、認証情報がOS内ですでに確立されているため、認証は必要ありません。