Ich habe zwei Microsoft SQL Server 2016-Knoten in einer Always On Availability-Gruppe. Ich versuche, eine BULK INSERT
(mithilfe einer SQL Server 2016 Management Studio-Abfrage) für eine Datei auszuführen, die sich in einem Windows Server 2016-Dateiserver-Failovercluster befindet. Es wird jedoch die folgende Fehlermeldung angezeigt:
Nachricht 4861, Ebene 16,
Status 1 Kann nicht massenweise geladen werden, da die Datei "\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt" nicht geöffnet werden konnte. Betriebssystemfehlercode 5 (Zugriff verweigert.)
Dies geschieht unabhängig davon, ob ich den Namen des aktiven Knotens ( nas2.my.domain
) oder den Listener des Failoverclusters ( nas.my.domain
) verwende.
Nachdem ich mich umgesehen hatte, stellte ich fest, dass dies darauf zurückzuführen war, dass der SQL Server die Identität des Benutzerkontos, mit dem ich verbunden bin, aufgrund von Nuancen mit nicht annehmen konnte BULK INSERT
.
Wenn Sie mithilfe der Windows-Authentifizierung eine Verbindung zum SQL Server herstellen, versucht das SQL Server-Dienstkonto, die Identität Ihres Benutzerkontos zu übernehmen, wenn Sie eine Verbindung zum Dateiserver herstellen. Wenn Sie eine Verbindung mithilfe der SQL Server-Authentifizierung herstellen, wird eine Verbindung zum Dateiserver als SQL Server-Dienstkonto hergestellt.
Wenn Delegierung und Identitätswechsel nicht ordnungsgemäß konfiguriert sind (Standardeinstellung), kann der SQL Server-Dienst die Identität Ihres Benutzerkontos nicht annehmen und versucht, als anonymer Benutzer eine Verbindung zum Dateiserver herzustellen.
Dies kann durch Durchsuchen des Sicherheitsereignisprotokolls auf dem Dateiserver bestätigt werden. Diese Fakten sowie eine Anleitung zum Konfigurieren der uneingeschränkten und eingeschränkten Delegierung sind in den folgenden Links dokumentiert:
Ich habe versucht, den Anweisungen im Handbuch zu folgen , aber es funktioniert immer noch nicht.
Die Datenbank, zu der ich versuche, BULK INSERT
ist nicht Teil der Verfügbarkeitsgruppe, daher sollte nur der MSSQL1-Knoten relevant sein. Der Dateiserver war auf dem NAS2-Knoten aktiv. Das Überprüfen des Ereignisprotokolls auf dem Dateiserver zeigt, dass dieses Problem weiterhin besteht und der SQL Server versucht, sich beim Dateiserver als anonymer Benutzer zu authentifizieren, anstatt sich als mein Benutzerkonto auszugeben.
Weiß jemand, was falsch läuft? Oder wenn sich in SQL Server 2016 etwas geändert hat, um diese Handbücher überflüssig zu machen?
- Dateiserver-Sicherheitsereignisprotokolleintrag
- Dienstkontodelegierung
- Dienstkonto-SPNs
- SQL Server # 1-Computerkontodelegation
- SPNs für Dateiserver 2-Computerkonto
- Gruppenrichtlinienobjekte
sys.dm_exec_connections
- Kerberos
Ich kann bestätigen, dass dieses Gruppenrichtlinienobjekt auf MSSQL1 über angewendet gpresult.exe /R
wurde und anschließend sowohl der SQL- als auch der Dateiserver-Knoten neu gestartet wurden, um sicherzustellen, dass alle Caches geleert wurden.
Antworten:
Ihre Konfiguration sieht solide aus. SPNs und Delegation sind so konfiguriert, wie ich es selbst gemacht hätte.
Das einzige, was Sie nicht erklärt haben, sind die Datei- / Freigabeberechtigungen. Hier setzt meine Lösung an.
Lösung 1 (persönliches Konto)
Lösung 2 (SQL Server-Dienstkonto)
BULK INSERT-Berechtigungen
Referenz: BULK INSERT (Transact-SQL)
quelle
Nach meiner Erfahrung mit der Delegierung benötigt das SQL Server-Dienstkonto die entsprechenden Berechtigungen für die Freigabe, auf die es in Ihrem Namen zugreifen möchte. Haben Sie diese Berechtigungen angepasst? Ich würde denken, dass nur Lesen im Voraus ausreichen würde.
quelle