Mam parę węzłów Microsoft SQL Server 2016 w grupie Always On Availability Group. Próbuję wykonać BULK INSERT
(za pomocą zapytania SQL Server 2016 Management Studio) na pliku znajdującym się w klastrze pracy awaryjnej serwera plików systemu Windows Server 2016, ale pojawia się następujący błąd:
Msg 4861, poziom 16, stan 1
Nie można załadować zbiorczo, ponieważ nie można otworzyć pliku „\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt”. Kod błędu systemu operacyjnego 5 (Odmowa dostępu.).
Stanie się tak bez względu na to, czy użyję aktywnego węzła name ( nas2.my.domain
) lub nasłuchiwania klastra pracy awaryjnej ( nas.my.domain
).
Po rozejrzeniu się okazało się, że było to spowodowane tym, że SQL Server nie mógł podszyć się pod konto użytkownika, z którym jestem połączony z powodu niuansów BULK INSERT
.
Jeśli łączysz się z programem SQL Server przy użyciu uwierzytelniania systemu Windows, konto usługi SQL Server próbuje podszyć się pod konto użytkownika podczas łączenia się z serwerem plików. Jeśli łączysz się przy użyciu uwierzytelniania programu SQL Server, połączy się on z serwerem plików jako konto usługi SQL Server.
Jeśli delegowanie i personifikacja nie są poprawnie skonfigurowane (stan domyślny), usługa SQL Server nie będzie mogła podszyć się pod twoje konto użytkownika i wróci do próby połączenia się z serwerem plików jako użytkownik anonimowy.
Można to potwierdzić, przeglądając dziennik zdarzeń bezpieczeństwa na serwerze plików. Te fakty wraz z przewodnikiem na temat konfiguracji nieograniczonego i ograniczonego delegowania są udokumentowane w tych linkach:
Próbowałem postępować zgodnie z instrukcjami w przewodniku thesqldude , ale wciąż nie działa.
Baza danych, którą próbuję BULK INSERT
utworzyć, nie należy do grupy dostępności, więc odpowiedni powinien być tylko węzeł MSSQL1. Serwer plików był aktywny w węźle NAS2. Sprawdzanie dziennika zdarzeń na serwerze plików pokazuje, że nadal występuje ten problem, a SQL Server próbuje uwierzytelnić się na serwerze plików jako anonimowy użytkownik, a nie podszywać się pod moje konto użytkownika.
Czy ktoś wie, co się dzieje? Lub jeśli coś się zmieniło w SQL Server 2016, aby te przewodniki stały się przestarzałe?
- Wpis dziennika zdarzeń zabezpieczeń serwera plików
- Delegowanie konta usługi
- SPN kont usługi
- SQL Server nr 1 Delegowanie konta komputera
- Serwer plików nr 2 SPN kont komputerów
- Obiekty zasad grupy
sys.dm_exec_connections
- Kerberos
Mogę potwierdzić, że ten obiekt zasad grupy został zastosowany do MSSQL1 za pośrednictwem gpresult.exe /R
, a następnie oba węzły SQL i serwer plików zostały ponownie uruchomione, aby upewnić się, że wszystkie pamięci podręczne zostały opróżnione.
Odpowiedzi:
Twoja konfiguracja wygląda solidnie. Nazwy SPN i delegowanie są skonfigurowane tak, jakbym zrobił to sam.
Jedyne, czego nie wyjaśniłeś, to uprawnienia do plików / udostępniania. Tutaj wkracza moje rozwiązanie.
Rozwiązanie 1 (konto osobiste)
Rozwiązanie 2 (konto usługi SQL Server)
Uprawnienia do wstawiania zbiorczego
Odwołanie: BULK INSERT (Transact-SQL)
źródło
Z mojego doświadczenia związanego z delegowaniem dostępu konto usługi SQL Server wymaga odpowiednich uprawnień do udziału, do którego próbuje uzyskać dostęp w Twoim imieniu. Czy dostosowałeś te uprawnienia? Sądzę, że z góry wystarczy tylko czytanie.
źródło