web-dev-qa-db-ja.com

一括読み込みできません。オペレーティングシステムエラーコード5(アクセスが拒否されました。)

いくつかの奇妙な理由で、一括挿入の実行に問題があります。

BULK INSERT customer_stg
FROM 'C:\Users\Michael\workspace\pydb\data\andrew.out.txt'
WITH
(
    FIRSTROW=0,
    FIELDTERMINATOR='\t',
    ROWTERMINATOR='\n'
)

this を読んだ後、自信を持って、ユーザーロールを正しく設定しました。

Bulkadmin固定サーバーロールのメンバーは、BULK INSERTステートメントを実行できます。

Windows認証のLogin Propertiesを正しく設定しました(以下を参照)。bulkadminに対するサーバー全体のアクセス許可を付与します。

windows authentication
(ソース: iforce.co.nz

コマンドEXEC sp_helpsrvrolemember 'bulkadmin'は、上記の情報が成功したことと、現在のユーザーMichael-PC\Michaelbulkadmin権限があることを通知します。

bulkadmin
(ソース: iforce.co.nz

しかし、私が知っている限りではすべてを正しく設定しましたが、まだエラーが発生しています。 SQL Server Management Studioから一括挿入を直接実行します。

メッセージ4861、レベル16、状態1、行2
ファイル「C:\ Users\Michael\workspace\pydb\data\andrew.out.txt」を開けなかったため、一括読み込みできません。オペレーティングシステムエラーコード5(アクセスが拒否されました)。

明らかにbulkadminsがステートメントを実行できるため、これは意味がありません。bulkadminの動作を再構成するつもりですか? (私はとても迷っている)。それを修正する方法についてのアイデアはありますか?

24
Killrawr

このエラーは、SQL Server認証を使用していて、SQL Serverがバルクロードフォルダーにアクセスできない場合に表示されます。

そのため、SQLサーバーにフォルダーへのアクセスを許可すると、問題が解決します。 enter image description here

方法は次のとおりです。フォルダに移動し、右クリック-> properties-> Securityタブ-> Edit-> Add(新しいウィンドウ)-> Advanced-> Find Now。検索結果のユーザーリストで、SQLServerMSSQLUser $ UserName $ SQLExpressのようなものを見つけ、開いたすべてのダイアログに対して[OK]をクリックします。

20
antew

SQL Serverを再インストールしてもこれが修正されるとは思わず、しばらく時間がかかるだけです。

  1. ユーザーアカウントに問題のフォルダーに対する読み取り権限があることを確認します。
  2. Process Monitor などのツールを使用して、実際にファイルにアクセスしようとしているユーザーを確認します。
  3. 私の推測では、ファイルにアクセスしようとしているのはMichael-PC\Michaelではなく、SQL Serverサービスアカウントです。この場合、少なくとも3つのオプションがあります(おそらく他のオプションもあります):

    a。実行するようにSQL Serverサービスを設定します。
    b。 SQL Serverサービスアカウントにそのフォルダーへの明示的なアクセスを許可します。
    c。 SQL Serverがアクセスできる場所、またはアクセスできるようにすることができる場所に、より論理的な場所にファイルを配置します(例:C:\bulk\)。

これがローカルのワークステーションであると仮定して、これらのことをお勧めします。本番マシンについて話しているとき、SQL Serverからのローカルファイルシステムアクセスに関して、より深刻なセキュリティ上の懸念が間違いなくあります。もちろん、上記のc.を使用して、タッチしたいフォルダ。

12
Aaron Bertrand

同じ問題SSIS 2012がありましたが、解決策はWindows認証を使用することでした。 saユーザーでSQL認証を使用していました。

4
alduar

'MSSQLSERVER'ユーザー(またはSQL ServerサービスがLog On As in Windows Servicesに設定されているユーザーに、CSVおよびフォーマットファイルを含むフォルダーに読み取り権限を与えてみてください。 =)

3
j3rbrown

時々、これは偽のエラーメッセージである可能性があり、プロセスを実行しているのと同じアカウントでファイルを開こうとしました。私の環境で同じ問題が発生し、ファイルを(プロセスを実行する同じ資格情報で)開いたときに、既知のプログラムに関連付ける必要があると言われましたが、それを開いて実行できましたエラーなしで処理します。

2
dianabeta
  1. Run => services.msc => SQL SERVER(MSSQLSERVER)を開始してサービスを停止します
  2. SQL SERVER(MSSQLSERVER)=> properties => LogOn Tab => Local System Account => OKを右クリックします
  3. SQLサーバーManagement Studioを再起動します。
2
Vinay Patel

1)SQLを開く2)タスクマネージャーで、SQLを実行しているアカウントを確認できます-Janが書いたように、おそらくMichael-PC\Michaelではありません。

SQLを実行するアカウントには、共有フォルダーへのアクセスが必要です。

1
md27

使用しているファイル('C:\Users\Michael\workspace\pydb\data\andrew.out.txt')は、MSSMSを実行しているクライアントマシンではなく、SQLサーバーマシン上にあります。

1
grunt

私たちの場合、それはKerberosの問題でした。この記事の手順に従って問題を解決しました: https://techcommunity.Microsoft.com/t5/SQL-Server-Support/Bulk-Insert-and-Kerberos/ba-p/317304

BULK INSERTステートメントが実行されているSQL Serverのマシンアカウントで委任を構成することになりました。マシンアカウントは、「cifs」サービスを介して、ファイルが置かれているファイルサーバーに委任できる必要があります。制約付き委任を使用している場合は、必ず「認証プロトコルを使用する」を指定してください。

DFSが関係している場合は、次のPowershellコマンドを実行して、ファイルサーバーの名前を取得できます。

Get-DfsnFolderTarget -Path "\\dfsnamespace\share"
0
Sam bryant

動作しているSSMSで一括挿入を実行すると同様の質問がありますが、タスクをSQL Serverエージェントに変換すると失敗し、「Operation system failure code 5」で返されました。

以前に投稿された多くのソリューションを参照した後、この方法で、ソースフォルダーへの「フルコントロール」アクセス権をNT SERVER/SQLSERVERAGENTに付与することで、問題を解決しました。 。

0
Xing.Shan