2009-07-07 169 views
15

xp_cmdshell(TSQLプロシージャ)を実行して、ネットワークドライブをマウントし、リモートmdbファイルにアクセスしたいとします。特定のユーザーとしてxp_cmdshellコマンドを実行

私はMS SQLサーバーの管理者であり、それに応じてxp_cmdshellの実行を許可しました。

  • 私はxp_cmdshellを呼び出して、コマンドを実行するユーザーが、つまりSQL Serverプロセスを実行するアカウントSQL システム管理者、次のとおりです。

    はしかし、まだ問題があります。論文の

どちらのアカウント私は私はSQLサーバーに接続していたとのアカウントとして実行されるのxp_cmdshellたい

  • 、すなわち管理者は、管理者グループ、SQLADMINグループであり、付与されています制御サーバーに送信する。両方のユーザーが同じドメインに属しています。これらはすべて同じマシン上で実行されます。

    欲しい商品が持つアカウントを指定するには、SP_ xp_ cmdshell_ PROXY_アカウントを使用しようとした管理者
    ためシステム管理者ないように取り付けられているので、このための競合のため、私はネットワークドライブを使用することはできませんが実行するxp_cmdshellしかし、SysAdminはまだ使用されているアカウントです。

    したがって、このコード:
    select user_name(), suser_name;
    exec xp_cmdshell 'echo %username%';

    表示されます。
    Administrator Administrator
    SysAdmin

    は、誰もがうまくxp_cmdshellをコマンドを偽装する方法を知っていますか? (再)設定するものはありますか?

    ありがとうございました。

  • +0

    sysadmin以外のユーザーは、その後どのように私は、特定のシステム管理者ユーザーを強制することができますxp_cmdshellを –

    +0

    実行すると、プロキシアカウントのみが使用されていますか? – Antwan

    +0

    sp_xp_cmd_shell_proxy_accountを使用して使用するアカウントを設定し、xp_cmdshellを使用してコマンドを実行しましたが、使用するアカウントは引き続きサービスアカウントです。私はあなたのステップを理解していることを確認したいだけです。 – SqlRyan

    答えて

    1

    多分PsExecを試すことができますか?このURLにあるファイルをダウンロードし、%Path%環境変数のフォルダメンバーにコピーします。

    http://technet.microsoft.com/en-us/sysinternals/bb897553.aspx

    exec xp_cmdshell 'psexec -u Administrator -p password net use ...' 
    
    +1

    これは解決策かもしれませんが、パスワードをプレーンテキストで書くことを意味しますが、これは難しいことです。 純粋なTSQLの方法を探しています... – Antwan

    +0

    こんにちは、ありがとう、私は下のコマンド "exec xp_cmdshell 'C:\ Adhoc \ PSTools \ psexec -u domain \ id -pパスワードdir \\ sharelocation'と同じ試してみました。提案する –

    0

    あなたはxp_cmdshellを内部のユーザ名とパスワードを使用して、 "ネット使用" を試みることができます。これにより、UNCへの接続の資格情報が確立されます。

    しかし、これがどれくらい長く続くかはわかりません。無期限に(たとえば、サーバーが再起動するまで)持続する場合は、「ネット使用」を行い、後で使用できるようにする起動ストアドプロシージャを使用できます。

    次のxp_cmdshell(MDBファイルにアクセスする)は、資格情報がOS内ですでに確立されているため、認証を必要としません。

    +0

    私はそれを認めることはほとんど恥ずかしいですが、これは動作します。セキュリティの観点からはひどいですが、私は絶望からそれをやりました。しかし、ネットワークディスクから直接MDBファイルを開いていますか?それは私を夜続けてくれるでしょう。私がやっていたことは、ドメインを持たない環境(つまりファイルコピー操作)で自宅で行われるログ配布でした。 – onupdatecascade

    7

    sysadminグループのログインとしてSQLに接続するため、xp_cmdshellがサービスアカウントとして実行されます。

    低特権ログインとして接続すると、代わりにxp_cmdshell_proxy_accountが使用されます。したがって、最初にEXECUTE AS LOGIN='lowprivaccount'を実行して、それが役立つかどうか確認してください。

    もちろん、あなたが実際に求めていることは、予想される使用ではありません。期待されるのは、特権の高いアカウントでxp_cmdshellがサービスアカウントを使用できる一方で、他のすべてのユーザーが低特権のプロキシアカウントを使用しなければならないことです。

    +0

    これは本当にsysadminサーバーの役割のセキュリティコンテキストを使って実行する必要がありますか?理想的には、sysadminを行う必要がある場合にのみ、sysadminロールを使用してください。 –

    3

    私は実際にこれを試して、ネットワーク共有上の類似したもののために、過去にこの方法を使用しなければならなかった...

    - あなたのドライブをマップし、それを永続化。

    は "ネット利用のトンを\\ <サーバー> < \共有> <パスワード> /ユーザー:<名> /永続:はい" のxp_cmdshell

    - トンドライブ

    を利用してT-SQLコードを

    - 「ネット利用さt:/削除」xp_cmdshellをドライブマッピングを削除するには、実際にSQLを実行ジョブを設定することができます

    をサービスが開始され、このドライブをマップするようにして、sqlが実行されている限り、常に共有にアクセスできるようにします。 sp_procoption(http://msdn.microsoft.com/en-us/library/ms181720.aspx

    +1

    UNCパスを直接参照するのではなく、ドライブをマップする理由が不思議です。 – Pondlife

    +0

    @Pondlife場合によっては、代替資格情報を使用してUNC(ドメインにはない)に接続するときに役立ちます。 –

    -2

    xp_cmdshellスクリプトを配置するストアドプロシージャを作成する必要があります。ドライブをマップするsprocをセットアップして、ドライブの初期マッピングを行い、sp_procoptionその中に。

    ストアドプロシージャは、管理者アカウントを使用して実行されます、したがって、あなたのxp_cmdshellをが正常に再起動サーバは、saveコマンドをコマンドplaseソリューションを実行する必要があります後、あなたがストアドプロシージャ

    create procedure RunShellIndirectly 
    
    as 
    
    declare @tawandachinaka as varchar(50) 
    
    set @tawandachinaka='DIR "c:\scrap measurement\"*.csv /B' 
    
    EXEC xp_cmdshell @tawandachinaka 
    
    +3

    "ストアドプロシージャは管理者アカウントを使用して実行されます":これは[正しくありません](http://msdn.microsoft.com/en-us/library/ms188354(v = sql.100).aspx)です。 – Pondlife

    +0

    ストアドプロシージャは、現在割り当てられているSQLサービスアカウントを使用して(OSに関する限り)実行され、SPはSQL権限(セキュリティで設定されている)によって許可されている場合にのみ実行できます。 –

    -1

    を実行したときに実行されます...

    Use Master GO 
    
    EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH 
    OVERRIDE GO 
    
    EXEC master.dbo.sp_configure 'xp_cmdshell', 1 RECONFIGURE WITH OVERRIDE GO 
    
    exec xp_cmdshell 'net use \ip\xxx pass /user:xxx /persistent:no' 
    
    Use Master GO 
    
    EXEC master.dbo.sp_configure 'show advanced options', 1 RECONFIGURE WITH 
    OVERRIDE GO 
    
    EXEC master.dbo.sp_configure 'xp_cmdshell', 0 RECONFIGURE WITH OVERRIDE 
    
    関連する問題