7

SQL Server 2008 データベースにデータを一括ロードするアプリケーションに取り組んでいます。CSV ファイルをネットワーク共有に書き込み、BULK INSERT コマンドを含むストアド プロシージャを呼び出します。

アプリケーションを完全に新しいネットワークに移行しています。この新しい世界では、一括挿入は次のエラーで失敗します:

Msg 4861, Level 16, State 1, Line 1
Cannot bulk load because the file "\\myserver\share\subfolder\filename" could not be opened. Operating system error code 5(failed to retrieve text for this error. Reason: 15105).

ファイルを書き込んだのと同じアカウントを使用して、Windows 認証を使用してデータベースに接続します。このファイルと、それが置かれているフォルダーは、私のユーザー アカウントとデータベース サーバーのドメイン サービス アカウントの両方に読み取りと変更の権限を与えます。そのサービス アカウントには、 MSDNで言及されているように、許可された委任が制限されているようです。それでも駄目。SQL Server アカウントを使用して接続すると、一括挿入は成功しますが、Windows 認証のみに固執しようとしています。

これを機能させるために何をする必要があるかを理解している人はいますか? SQL Server は、ネットワーク共有上のデータにアクセスし、そのサービス アカウントと接続されたユーザーのサービス アカウントの間をどのように行き来するのでしょうか? 現在のインフラストラクチャで同様の状況で一括挿入できることはわかっていますが、これは経年劣化で非常に扱いにくいため、これを可能にするために過去に何が行われたかを追跡するのは困難です。

4

4 に答える 4

5

最近、多くの開発者にこの問題が発生しました。一括挿入のテストを可能にする方法をいくつか考え出しました。

私たちの好みは、SQL サービス アカウントを使用することでした。SQL サーバーと SQL エージェントをサービス アカウントとして実行するように設定し、開発者がエージェント ジョブをトリガーできるようにしました。サービス アカウントには UNC 共有へのアクセス許可が付与され、これはすべて正しく機能しました。サービス アカウントは常にこれらのエージェント ジョブを正常に実行できることに注意してください (UNC 権限が設定されていると仮定します)。これらの問題に遭遇するのは、テストしようとしている開発者です。

もう 1 つの方法は、SQL サーバー自体に共有を作成し、一括挿入パスをローカル ディレクトリに指定することです。これらのエラーは、UNC パスにアクセスするときにのみ発生するようです。UNC パスにアクセスを許可する適切なアクセス許可があるかどうかに関係なく。たとえばC:\test\、SQL サーバー自体にフォルダーを作成し、開発者がそこにテスト ファイルをドロップできるようにします。これらは、一括挿入コマンドを介して呼び出されます。

マスターに対してコマンドを実行して、SQL ログイン グループの権限で一括挿入を許可する必要がある場合があります。これは以下の通りです。

GRANT ADMINISTER BULK OPERATIONS TO "domain\usergroup"
于 2013-11-05T09:42:11.430 に答える
4

Adam Saxton のブログ (Kerberos と共有からの一括挿入について) を読む必要があります: http://blogs.msdn.com/b/psssql/archive/2012/09/07/bulk-insert-and-kerberos.aspx。Adam は 2 つの方法を提案しています。マシン (sqlservr.exe スタートアップではなく) アカウントの制約付き委任を有効にするか、SQL Server ログインを使用します。Adam は他に 2 つのアプローチについて言及しています (彼はお勧めしません)。

余談ですが、OP のメッセージ「(このエラーのテキストを取得できませんでした。理由: 15105)」の後半は、SQL Server の「Windows サービス アカウントとアクセス許可の構成」トピックに記載されている権限を欠いている SQL Server スタートアップ アカウントに関連している可能性があります。 SeAssignPrimaryTokenPrivilege など。

于 2015-08-11T22:17:49.473 に答える
1

この問題を解決したことはありますか?最近同様の問題が発生し、それを解決する最善の方法はSQLログインを使用することであることがわかりました。

最初は、ここでメモを読んだので、SQL Serverに接続しているWindowsアカウントに読み取りアクセス許可を付与しただけで問題ないと思いましたが、への読み取りアクセスを許可してもEveryone、まだ読み取ることができませんでした。ファイル。

その理由は、SQL ServerがWindowsユーザーになりすまして、UNC共有にアクセスしようとしていることに関係していると思います。これは委任であり、明示的に有効にしない限り許可されません。ここに役立つかもしれないいくつかのメモがあります。これはあなたが話す制約された代表団であり、私もそれを機能させることができませんでした!

結論: SQLログインを使用して、SQL Serverプロセスアカウントに共有の読み取りアクセス許可があることを確認し(Everyone私の場合は読み取りを許可することにより)、機能しました。

于 2012-10-02T08:47:51.880 に答える
1

AD ユーザーで一括挿入するには、SQL サービス自体がドメイン ユーザーとして実行されている必要があり、認証を委任できる AD 権限が必要です。広告ユーザーとリンク サーバーを実行する場合も同様です。ここに AD とリンク サーバーのリンクがありますが、アクセス許可は同じです。

リンクされたサーバーと Active Directory

  • サーバーには、ドメイン管理者によって登録された SPN が必要です。
  • SQL Server が実行されているアカウントは、委任に対して信頼されている必要があります。
  • サーバーは、TCP/IP または名前付きパイプのネットワーク接続を使用している必要があります。
于 2015-08-03T18:51:17.830 に答える