none
リモートサーバへBCPコマンドでの接続時に失敗する RRS feed

  • 質問

  • ネットワーク上のSQLServer2008R2のデータベースに同ネットワーク上の端末からアクセスしてBCPでファイル入出力をしたいと思っています。

    試しに実行してみましたが、SQLState = 28000, NativeError = 18456
    Error = [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user [ユーザ名].となってしまい、解決方法ご教示いただきたく投稿しました。

    リモートサーバ機のSQLServer2008R2はSTD、認証はWindows認証またはSQLServer認証いずれか、となっています。

    また、Windows認証のユーザはSQLServerManagementStudioでインポートエクスポートいずれも可能であるユーザです。

    Windows認証:bcp [DB名].[テーブル名] out "出力先" -S [サーバ名] -T

    SQLServer認証(usera):bcp [DB名].[テーブル名] out "出力先" -S [サーバ名] -U usera -P ****

    よろしくお願いします。

    2015年1月30日 1:00

回答

  • こんにちは

    BCPに必要な権限はSELECT権限ですが、これは問題ないですか?
    https://msdn.microsoft.com/ja-jp/library/ms162802.aspx

    そのクライアントPCで、ODBCデータソースを作ってみて、テストは通りますかね?Select権限が必要なので、ODBCデータソースでそのDBにログインできるはずです。
    で、もしAccessやExcelが入っているならそのテーブルが選択でき、データが見えるはずですよね。

    いかがでしょう?


    Shigeru Murai / SIMOZ

    すみません、訂正です。
    Select権限が必要なのは、BCP Outです。
    BCP Inはまた異なる権限が必要です。URLご参照ください。
    • 回答の候補に設定 星 睦美 2015年2月2日 1:31
    • 編集済み SIMOZ 2015年2月2日 4:51 記載不十分のため
    • 回答としてマーク schineenee 2015年2月3日 8:58
    2015年1月30日 15:34
  • SQLState が 28000 は認証に失敗ということですね。
    NativeError が 18456 というのも認証に失敗を意味しています。

    SQL Server をサービスしているサーバー側のイベントログや SQL Server エラーログに「状態」コードが記録されているはずです。
    これによって、ログイン名のタイプミスなのか、パスワード不一致なのか、等々といったところの区別が付きますので、確認されることをお勧めします。
    各状態コードが何を意味するかは以下にあります。
    https://technet.microsoft.com/ja-jp/library/cc645917(v=sql.105).aspx


    MCITP(Database Developer/Database Administrator)

    • 回答の候補に設定 星 睦美 2015年2月2日 1:31
    • 回答としてマーク schineenee 2015年2月3日 8:59
    2015年1月30日 16:01

すべての返信

  • こんにちは

    BCPに必要な権限はSELECT権限ですが、これは問題ないですか?
    https://msdn.microsoft.com/ja-jp/library/ms162802.aspx

    そのクライアントPCで、ODBCデータソースを作ってみて、テストは通りますかね?Select権限が必要なので、ODBCデータソースでそのDBにログインできるはずです。
    で、もしAccessやExcelが入っているならそのテーブルが選択でき、データが見えるはずですよね。

    いかがでしょう?


    Shigeru Murai / SIMOZ

    すみません、訂正です。
    Select権限が必要なのは、BCP Outです。
    BCP Inはまた異なる権限が必要です。URLご参照ください。
    • 回答の候補に設定 星 睦美 2015年2月2日 1:31
    • 編集済み SIMOZ 2015年2月2日 4:51 記載不十分のため
    • 回答としてマーク schineenee 2015年2月3日 8:58
    2015年1月30日 15:34
  • SQLState が 28000 は認証に失敗ということですね。
    NativeError が 18456 というのも認証に失敗を意味しています。

    SQL Server をサービスしているサーバー側のイベントログや SQL Server エラーログに「状態」コードが記録されているはずです。
    これによって、ログイン名のタイプミスなのか、パスワード不一致なのか、等々といったところの区別が付きますので、確認されることをお勧めします。
    各状態コードが何を意味するかは以下にあります。
    https://technet.microsoft.com/ja-jp/library/cc645917(v=sql.105).aspx


    MCITP(Database Developer/Database Administrator)

    • 回答の候補に設定 星 睦美 2015年2月2日 1:31
    • 回答としてマーク schineenee 2015年2月3日 8:59
    2015年1月30日 16:01
  • Murai 様

    ご回答ありがとうございます。ODBCでの接続は同じエラーコードでNGでした。SQLサーバは管理部門が異なるため、SELECT権限があるかの確認をしてみます。

    もしご存知でしたらご教示いただきたいのですが、SQLManagementStudioではクエリでSelectもINSERTもCREATE TABLEもできてしまうのですが、これは権限がついているということだと思っていましたがまた別の話なのでしょうか。

    よろしくお願いいたします。

    2015年2月2日 1:25
  • nagino様

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

    サーバ管理部門が海外にあるため、サーバ側で確認してもらうことをまとめて問い合わせをしようと準備しております。

    有用な情報ご提供ありがとうございます。

    2015年2月2日 1:26
  • SQL Management Studioにログインする際、どのような方法でログインしていますか?

    同じ認証方法の同じユーザー名なら、権限も同じはずですが・・・
    (同じじゃないとまずいですよね。)


    Shigeru Murai / SIMOZ

    2015年2月2日 1:45
  • SQLManagementStudioにはWindows認証でログインしています。

    >同じ認証方法の同じユーザー名なら、権限も同じはずですが

    そうですよね。。そう思ったのですが、もしかしてBCPで使う権限とSSMSと違ったりするのだろうかと思いまして…

    サーバ管理部門に私の使用しているアカウントについて確認をしてみます。

    2015年2月2日 1:49
  • SIMOZ様からいただいたリンクをもとにいろいろ試してみて何とか成功したので、ご報告させていただきます。

    BCPでファイルインポートするようにSQLServer認証用のユーザを作成し、該当データベースにマッピングした上で

    さらに対象テーブルにてそのユーザの選択と変更権限を許可しました。

    Windows認証だとパスワードポリシーでバッチ運用に支障が出るので、SQLServer認証ユーザをこさえることで解決しました。

    皆様ありがとうございました!!!

    2015年2月3日 9:04