Always On可用性グループにMicrosoft SQL Server 2016ノードのペアがあります。BULK INSERT
Windows Server 2016ファイルサーバーフェールオーバークラスターにあるファイルに対して(SQL Server 2016 Management Studioクエリを使用して)実行しようとしていますが、次のエラーが表示されます。
メッセージ4861、レベル16、状態1
ファイル "\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt"を開けなかったため、一括読み込みできません。オペレーティングシステムエラーコード5(アクセスが拒否されました)。
これは、アクティブノード名(nas2.my.domain
)またはフェールオーバークラスターリスナー(nas.my.domain
)を使用するかどうかに関係なく発生します。
調べてみると、これは、SQL Serverが、ニュアンスが原因で接続しているユーザーアカウントを偽装できないことが原因であることがわかりましたBULK INSERT
。
Windows認証を使用してSQL Serverに接続する場合、SQL Serverサービスアカウントは、ファイルサーバーへの接続時にユーザーアカウントを偽装しようとします。SQL Server認証を使用して接続する場合、SQL Serverサービスアカウントとしてファイルサーバーに接続します。
委任と偽装が適切に構成されていない場合(既定の状態)、SQL Serverサービスはユーザーアカウントを偽装できず、匿名ユーザーとしてファイルサーバーに接続しようとします。
これは、ファイルサーバーのセキュリティイベントログを調べることで確認できます。これらの事実は、制約なしおよび制約付き委任の構成に関するガイドとともに、次のリンクに記載されています。
私はsqldudeのガイドの指示に従ってみましたが、まだ機能していません。
私が行おうとしBULK INSERT
ているデータベースは可用性グループの一部ではないため、MSSQL1ノードのみが関連するはずです。ファイルサーバーはNAS2ノードでアクティブでした。ファイルサーバーのイベントログを確認すると、この問題が引き続き発生しており、SQL Serverがユーザーアカウントを偽装するのではなく匿名ユーザーとしてファイルサーバーに認証しようとしていることがわかります。
誰が何が間違っているのか知っていますか?または、これらのガイドを廃止するためにSQL Server 2016で何かが変更された場合はどうなりますか?
- ファイルサーバーセキュリティイベントログエントリ
- サービスアカウントの委任
- サービスアカウントSPN
- SQL Server#1コンピューターアカウントの委任
- ファイルサーバー#2コンピューターアカウントSPN
- グループポリシーオブジェクト
sys.dm_exec_connections
-Kerberos
このGPOがMSSQL1に適用されたことを確認できgpresult.exe /R
ます。また、キャッシュがフラッシュされたことを確認するために、SQLとファイルサーバーの両方のノードがその後再起動されました。