Skonfiguruj nieskrępowaną delegację dla BULK INSERT

12

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 INSERTutworzyć, 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?

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.

Muh Fugen
źródło
1
Dwa pytania: 1) Czy spróbować umożliwiając konta osobistego dla systemu Windows Domain Delegatury ?, 2) Po podłączeniu do serwera SQL za pomocą SSMS, czy jesteś zalogowany na serwerze (czyli Remote Desktop), że SQL Server jest uruchomiony i łączenie lokalnie, lub zalogowałeś się na stacji roboczej i łączysz się zdalnie z programem SQL Server? Jeśli nie próbowałeś zalogować się bezpośrednio na serwerze i połączyć lokalnie przez SSMS, spróbuj tego. Jeśli nie próbowałeś włączyć swojego konta domeny do delegowania, spróbuj tego.
Solomon Rutzky

Odpowiedzi:

1

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)

  1. Sprawdź, czy twoje konto osobiste ma dostęp do pliku w udziale serwera plików
    • twoje konto osobiste wymaga co najmniej uprawnień CZYTAJ na poziomie uprawnień do udostępniania lub w większości przypadków KAŻDY ma uprawnienia CZYTAJ.
    • twoje konto osobiste wymaga co najmniej uprawnień CZYTAJ na poziomie uprawnień do pliku
    • Sprawdź dziedziczenie uprawnień na poziomie pliku dla tego jednego pliku
      • Uruchom ponownie program SQL Server po zmianie uprawnień do plików lub uruchom usługę SQL Server.
    • Alternatywnie: Zaloguj się do SQL Server przy użyciu konta osobistego i połącz się z udziałem i otwórz plik.
  2. Otwórz SSMS na swoim koncie osobistym .
  3. Otwórz połączenie z wystąpieniem programu SQL Server za pomocą uwierzytelniania systemu Windows.
    • Sprawdź, czy masz połączenie z instancją przy użyciu konta usługi SQL Server za pomocą skryptu, którego używałeś wcześniej.
  4. Wykonaj import za pomocą BULK INSERT

Rozwiązanie 2 (konto usługi SQL Server)

  1. Sprawdź, czy konto usługi SQL Server ma dostęp do pliku w udziale serwera plików
    • że usługa SQL Server wymaga konta w uprawnieniach przeczytać przynajmniej na poziomie uprawnień zakładowego lub w większości przypadków można zobaczyć, że każdy ma uprawnienia do odczytu.
    • że usługa SQL Server wymaga konta w uprawnieniach przeczytać przynajmniej na poziomie uprawnień pliku,
    • Sprawdź dziedziczenie uprawnień na poziomie pliku dla tego jednego pliku
      • Uruchom ponownie program SQL Server po zmianie uprawnień do plików lub uruchom usługę SQL Server.
    • Alternatywnie: Zaloguj się do SQL Server przy użyciu konta usługi SQL Server i połącz się z udziałem i otwórz plik.
  2. Otwórz SSMS za pomocą konta usługi SQL Server .
    • Runas: twoja_domena \ SQL_Server_service_account
    • Podaj hasło
  3. Otwórz połączenie z serwerem SQL Server za pomocą uwierzytelniania systemu Windows.
    • Sprawdź, czy masz połączenie z instancją przy użyciu konta usługi SQL Server za pomocą skryptu, którego używałeś wcześniej.
  4. Wykonaj import za pomocą BULK INSERT

Uprawnienia do wstawiania zbiorczego

Delegowanie konta bezpieczeństwa (personifikacja)

Jeśli użytkownik korzysta z logowania do SQL Server, używany jest profil bezpieczeństwa konta procesowego SQL Server. Logowanie przy użyciu uwierzytelniania programu SQL Server nie może być uwierzytelniane poza aparatem bazy danych. Dlatego po zainicjowaniu polecenia BULK INSERT przez logowanie przy użyciu uwierzytelniania programu SQL Server połączenie z danymi jest nawiązywane przy użyciu kontekstu zabezpieczeń konta procesowego programu SQL Server ( konto używane przez usługę aparatu bazy danych SQL Server ). Aby pomyślnie odczytać dane źródłowe , musisz przyznać konto używane przez aparat bazy danych SQL Server, dostęp do danych źródłowych. Natomiast jeśli użytkownik programu SQL Server zaloguje się przy użyciu uwierzytelniania systemu Windows, użytkownik może odczytać tylko te pliki, do których konto użytkownika może uzyskać dostęp, niezależnie od profilu bezpieczeństwa procesu SQL Server.

Odwołanie: BULK INSERT (Transact-SQL)

John aka hot2use
źródło
0

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.

Chris Lumnah
źródło