none
OPENROWSETのクエリでxp_cmdshell実行結果エラーについて RRS feed

  • 全般的な情報交換

  • こんにちは。

     

    以下のコードを書いてみました。

     

    SELECT a.*
    FROM OPENROWSET('SQLOLEDB', ’MYDB';'sa';'password', 'exec xp_cmdshell ''dir c:\''') AS a;

     

    なぜこの結果は

    メッセージ 7357、レベル 16、状態 2、行 1

    オブジェクト "exec xp_cmdshell 'dir c:\'" を処理できません。リンク サーバー "(null)" の OLE DB プロバイダ "SQLNCLI10" では、オブジェクトに列がないか、現在のユーザーがそのオブジェクトに対する権限を持っていないことが示されています。

    oledbでsaでログインし、このsaはAdminですから、もちろんxp_cmdshellの実行権限もあります。

     

    それはなぜでしょうか。

     

    一応、

    SELECT a.*
    FROM OPENROWSET('SQLOLEDB', ’MYDB';'sa';'password', 'select 123') AS a;

    は問題なく、実行可能で、エラーもないです。

     

    ぜひ教えてください。

     

     

    2008年9月14日 17:00

すべての返信

  •  yangjiayi さんからの引用

    こんにちは。

     

    以下のコードを書いてみました。

     

    SELECT a.*
    FROM OPENROWSET('SQLOLEDB', ’MYDB';'sa';'password', 'exec xp_cmdshell ''dir c:\''') AS a;

     

    なぜこの結果は

    メッセージ 7357、レベル 16、状態 2、行 1

    オブジェクト "exec xp_cmdshell 'dir c:\'" を処理できません。リンク サーバー "(null)" の OLE DB プロバイダ "SQLNCLI10" では、オブジェクトに列がないか、現在のユーザーがそのオブジェクトに対する権限を持っていないことが示されています。

    oledbでsaでログインし、このsaはAdminですから、もちろんxp_cmdshellの実行権限もあります。

     

    それはなぜでしょうか。

     

    一応、

    SELECT a.*
    FROM OPENROWSET('SQLOLEDB', ’MYDB';'sa';'password', 'select 123') AS a;

    は問題なく、実行可能で、エラーもないです。

     

    ぜひ教えてください。

     

     

    自分で解決しました。問題があったのがa.*のところです。

    xp_cmdshell 'dir c:\'のリターン値をちゃんと設定すれば、OKでした。

    2008年9月15日 9:07
  • yangjiayiさん、こんにちは。中川俊輔です。

     

    無事問題を解決されたようですね!

    yangjiayiさんが投稿してくださった解決方法を有効活用するため、

    勝手ながら投稿の種類をコメントに変更させていただきました。

     

    元に戻すこともできますので、ご確認ください。

    それでは!

    2008年9月26日 5:13
  • 有難う御座います。がんばります。

    2008年10月5日 15:08