none
SQL Server 2014上にてVB6で作った自作exeをxp_cmdshellで実行したい RRS feed

  • 質問

  • お世話になります。
    SQL Server 2014でのxp_cmdShellのexe実行で困っています。お知恵をお貸し下さい。

    従来は、下記の環境(SQL Server 2005)で正常に動作していた自作exeがSQL Server 2014に移植した際に動作しなくなりました。
    自作exeは、古くVB6にて作成しており、vb.netなどへのアップグレードはしたくありません。
    自作exeを変更することなく、SQL Server 2014で動作させることはできるのでしょうか?

    ■従来の環境:
    ・OS :Windows server 2003(32bit)
    ・SQL:SQL server 2005
    ・実行後の戻り値:0 実行処理は正常

    ■新環境:
    ・OS :Windows server 2012(64bit)
    ・SQL:SQL server 2014
    ・実行後の戻り値:255 xxx.exeは実行されていない
    ・xp_cmdshellサーバー構成オプション:
     下記のストアドを実行し、有効化しています。

    -- To allow advanced options to be changed.
    EXEC sp_configure 'show advanced options', 1;
    GO
    -- To update the currently configured value for advanced options.
    RECONFIGURE;
    GO
    -- To enable the feature.
    EXEC sp_configure 'xp_cmdshell', 1;
    GO
    -- To update the currently configured value for this feature.
    RECONFIGURE;
    GO
     

    ■実行ソフト:
    ・自作ソフト:xxx.exe(VB6で作成したコンソールソフト)
    ・実行ストアド:(抜粋)

     Declare @Result int
     Declare @cmd varchar(500)
     set @cmd='D:\prog\xxx.exe arg1,arg2'
     exec @Result = master..xp_cmdShell @cmd 
    

    ・「xxx.exe」はコマンドプロンプト上では正常に動作することを確認しています。

    OS(WS2003(32bit)⇒WS2012(64bit))やSQL(2005⇒2014)のバージョンアップにより、ストアドや構成上などで他に何かしなければならないのでしょうか?よろしくお願いいたします。

    2015年9月4日 0:10

すべての返信

  • xp_cmdshellのドキュメントには

    xp_cmdshell プロキシ アカウント
    sysadmin 固定サーバー ロールのメンバー以外のユーザーが xp_cmdshell を呼び出した場合は、##xp_cmdshell_proxy_account## という資格情報に格納されているアカウント名とパスワードによって、Windows への接続が行われます。 このプロキシ資格情報が存在しない場合、xp_cmdshell は失敗します。

    と書かれています。この仕様はSQL Server 2005でも同じです。今まで実行できていたとすれば、実行したユーザーのロールに違いがありませんか?

    というのもSQL Server 2012のセキュリティの機能強化にてadministratorsグループやLocal Systemに対してsysadmin固定サーバーロールは付与されなくなっています。

    2015年9月4日 0:41
  • 佐祐理様

    早速の回答ありがとうございます。

    大事な情報を書き忘れていました。
    下記のような単純なDOSコマンド(dir)などは正常に実行できます。

     Declare @Result int
     Declare @cmd varchar(500)
     set @cmd='dir *.*'
     exec @Result = master..xp_cmdShell @cmd 
    
    このようにxp_cmdshellコマンドが全て実行不可ではなく、VB6自作exeが原因のような気がします。

    大事な情報が抜けていて申し訳ありませんでした。

    この状況でもユーザーのロール等が関係あるでしょうか?
    関係あるようでしたら確認したいと思います。

    ただ、具体的にどこを確認すればよいかわかりません。
    大変申し訳ありませんが、確認方法を教えて下さい。


    2015年9月4日 1:20