Udostępnij za pośrednictwem


Rejestrowanie głównej nazwy usługi dla połączeń Kerberos

Dotyczy:programu SQL Server

Aby korzystać z uwierzytelniania Kerberos w programie SQL Server, oba następujące warunki muszą mieć wartość true:

  • Komputery klienckie i serwerowe muszą być częścią tej samej domeny systemu Windows lub w zaufanych domenach.

  • Główna nazwa usługi (SPN) musi być zarejestrowana w usłudze Active Directory, która przyjmuje rolę Centrum dystrybucji kluczy w domenie systemu Windows. Nazwa SPN jest po zarejestrowaniu przypisywana do konta systemu Windows, które uruchomiło usługę instancji SQL Server. Jeśli rejestracja nazwy głównego serwera (SPN) nie została wykonana lub się nie powiedzie, warstwa zabezpieczeń systemu Windows nie może ustalić konta skojarzonego z nazwą SPN, a uwierzytelnianie Kerberos nie jest używane.

    Notatka

    Jeśli serwer nie może automatycznie zarejestrować nazwy SPN, nazwa SPN musi zostać zarejestrowana ręcznie. Zobacz ręczną rejestrację SPN.

Możesz sprawdzić, czy połączenie korzysta z protokołu Kerberos, wysyłając zapytanie do widoku zarządzania dynamicznego sys.dm_exec_connections. Uruchom następujące zapytanie i sprawdź wartość kolumny auth_scheme, która jest KERBEROS, jeśli protokół Kerberos jest włączony.

SELECT auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;

Napiwek

Microsoft Kerberos Configuration Manager for SQL Server to narzędzie diagnostyczne ułatwiające rozwiązywanie problemów z łącznością protokołu Kerberos z programem SQL Server. Aby uzyskać więcej informacji, zobacz Microsoft Kerberos Configuration Manager for SQL Server.

Rola SPN w uwierzytelnianiu

Gdy aplikacja otworzy połączenie i używa uwierzytelniania systemu Windows, klient natywny programu SQL Server przekazuje nazwę komputera programu SQL Server, nazwę wystąpienia i, opcjonalnie, nazwę SPN. Jeśli połączenie spełnia warunki SPN, jest używane bez żadnych zmian.

Jeśli połączenie nie przekazuje nazwy SPN, domyślna nazwa SPN jest konstruowana na podstawie używanego protokołu, nazwy serwera i nazwy wystąpienia.

W obu powyższych scenariuszach nazwa SPN jest wysyłana do Centrum dystrybucji kluczy w celu uzyskania tokenu zabezpieczającego na potrzeby uwierzytelniania połączenia. Jeśli nie można uzyskać tokenu zabezpieczającego, uwierzytelnianie używa protokołu NTLM.

Nazwa SPN to nazwa, za pomocą której klient jednoznacznie identyfikuje wystąpienie usługi. Usługa uwierzytelniania Kerberos może używać nazwy SPN do uwierzytelniania usługi. Gdy klient chce nawiązać połączenie z usługą, lokalizuje wystąpienie usługi, komponuje nazwę SPN dla tego wystąpienia, łączy się z usługą i prezentuje nazwę SPN usługi do uwierzytelniania.

Uwaga

Informacje przedstawione w tym artykule dotyczą również konfiguracji programu SQL Server korzystających z klastrowania.

Uwierzytelnianie systemu Windows jest preferowaną metodą uwierzytelniania użytkowników w programie SQL Server. Klienci korzystający z uwierzytelniania systemu Windows są uwierzytelniani przez protokół NTLM lub Kerberos. W środowisku usługi Active Directory uwierzytelnianie Kerberos jest zawsze podejmowane jako pierwsze.

Uprawnienia

Po uruchomieniu usługi silnika bazy danych, próbuje się zarejestrować nazwę główną usługi (SPN). Załóżmy, że konto używane do uruchamiania serwera SQL Server nie ma uprawnień do rejestrowania głównej nazwy usługi (SPN) w usługach Active Directory Domain Services. W takim przypadku to wywołanie nie powiedzie się, a komunikat ostrzegawczy jest rejestrowany zarówno w dzienniku zdarzeń aplikacji, jak i w dzienniku błędów programu SQL Server.

Aby zarejestrować nazwę SPN, silnik bazy danych musi działać na wbudowanym koncie, takim jak Local System (niezalecane) lub NETWORK SERVICEalbo na koncie, które ma uprawnienia do rejestrowania nazwy SPN. Nazwę SPN można zarejestrować przy użyciu konta administratora domeny, ale nie jest to zalecane w środowisku produkcyjnym. Program SQL Server można uruchomić przy użyciu konta wirtualnego lub zarządzanego konta usługi (MSA). Zarówno konta wirtualne, jak i konta MSA mogą zarejestrować nazwę SPN (Nazwa Podmiotu Usługi). Jeśli program SQL Server nie jest uruchomiony na jednym z tych kont, nazwa SPN nie jest zarejestrowana podczas uruchamiania, a administrator domeny musi ręcznie zarejestrować nazwę SPN.

Formaty nazwy SPN

Format SPN obsługuje uwierzytelnianie Kerberos w protokole TCP/IP, nazwanych potokach i pamięci udostępnionej. Obsługiwane formaty SPN dla wystąpień nazwanych i domyślnych przedstawiają się następująco.

Nazwana instancja

  • MSSQLSvc/<FQDN>:[<port> | <nazwa wystąpienia>], gdzie:

    • MSSQLSvc to usługa, która jest rejestrowana.
    • <FQDN> jest w pełni kwalifikowaną nazwą domeny serwera.
    • <port> jest numerem portu TCP.
    • <instancename> jest nazwą wystąpienia programu SQL Server.

Wystąpienie domyślne

  • MSSQLSvc/<FQDN>:<port> | MSSQLSvc/<FQDN>, gdzie:

    • MSSQLSvc to usługa, która jest rejestrowana.
    • <FQDN> jest w pełni kwalifikowaną nazwą domeny serwera.
    • <port> jest numerem portu TCP.
Format SPN Opis
MSSQLSvc/<FQDN>:<port> 1 Domyślna nazwa SPN wygenerowana przez dostawcę, gdy jest używany protokół TCP. <port> jest numerem portu TCP.
MSSQLSvc/<FQDN> Domyślna nazwa SPN wygenerowana przez dostawcę dla wystąpienia domyślnego, gdy jest używany protokół inny niż TCP. <FQDN> jest w pełni kwalifikowaną nazwą domeny.
MSSQLSvc/<FQDN>:<instancename> Domyślna SPN wygenerowana przez dostawcę dla nazwanej instancji, gdy używany jest protokół inny niż TCP. <instancename> jest nazwą wystąpienia programu SQL Server.

1 Format nazwy SPN nie wymaga numeru portu. Serwer z wieloma portami lub protokół, który nie używa numerów portów, nadal może używać uwierzytelniania Kerberos.

W przypadku połączenia TCP/IP, w którym port TCP znajduje się w nazwie SPN, program SQL Server musi włączyć protokół TCP, aby użytkownik nawiązał połączenie przy użyciu uwierzytelniania Kerberos.

Automatyczna rejestracja SPN

Po uruchomieniu wystąpienia silnika bazy danych SQL Server, program SQL Server próbuje zarejestrować nazwę SPN dla usługi SQL Server. Po zatrzymaniu wystąpienia program SQL Server próbuje wyrejestrować SPN. W przypadku połączenia TCP/IP nazwa SPN jest zarejestrowana w formacie MSSQLSvc/<FQDN>:<tcpport>. Zarówno nazwane wystąpienia, jak i wystąpienie domyślne są rejestrowane jako MSSQLSvc, opierając się na wartości <tcpport> w celu odróżnienia wystąpień.

W przypadku innych połączeń obsługujących protokół Kerberos nazwa SPN jest zarejestrowana w formacie MSSQLSvc/<FQDN>:<instancename> dla nazwanego wystąpienia. Format rejestrowania wystąpienia domyślnego to MSSQLSvc/<FQDN>.

Aby przyznać uprawnienia do konta uruchamiania programu SQL Server, aby zarejestrować i zmodyfikować nazwę SPN, wykonaj następujące kroki:

  1. Na komputerze kontrolera domeny przejdź do Użytkowników i komputerów usługi Active Directory.

  2. Wybierz pozycję View > Advanced.

  3. W obszarze Computersznajdź komputer z programem SQL Server, a następnie kliknij prawym przyciskiem myszy i wybierz pozycję Właściwości.

  4. Wybierz kartę zabezpieczeń i wybierz pozycję Advanced.

  5. Jeśli na liście nie ma konta uruchamiania programu SQL Server, wybierz pozycję Dodaj, aby go dodać. Po dodaniu wykonaj następujące kroki:

    1. Wybierz konto i kliknij opcję Edytuj.

    2. W obszarze Uprawnienia wybierz pozycję zweryfikowaną usługę zapisuPrincipalName.

    3. Przewiń w dół i w sekcji właściwości wybierz pozycję

      • Odczyt servicePrincipalName
      • Napisz servicePrincipalName
    4. Wybierz dwukrotnie OK.

  6. Zamknij Użytkownicy i Komputery usługi Active Directory.

Interwencja ręczna może być wymagana do zarejestrowania lub wyrejestrowania głównej nazwy usługi, jeśli konto usługi nie ma uprawnień wymaganych do tych akcji.

Ręczna rejestracja SPN

Aby ręcznie zarejestrować nazwę SPN, możesz użyć narzędzia setspn wbudowanego w system Windows. setspn.exe to narzędzie wiersza polecenia, które umożliwia odczytywanie, modyfikowanie i usuwanie właściwości katalogu Nazwy główne usługi (SPN). To narzędzie umożliwia również wyświetlanie bieżących nazw SPN, resetowanie domyślnych nazw SPN konta i dodawanie lub usuwanie dodatkowych nazw SPN.

Aby uzyskać więcej informacji na temat narzędzia setspn , wymaganych uprawnień i przykładów korzystania z niego, zapoznaj się z setspn .

Poniższy przykład ilustruje składnię używaną do ręcznego rejestrowania głównej nazwy usługi dla połączenia TCP/IP przy użyciu konta użytkownika domeny:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:1433 redmond\accountname

Notatka

Jeśli nazwa SPN już istnieje, należy ją usunąć, zanim będzie można ją ponownie zarejestrować. W tym celu należy użyć setspn z przełącznikiem -D. Na poniższych przykładach pokazano, jak ręcznie zarejestrować nową nazwę SPN opartą na instancji. W przypadku domyślnej instancji z użyciem konta użytkownika domeny należy użyć:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com redmond\accountname

W przypadku nazwanego wystąpienia użyj:

setspn -S MSSQLSvc/myhost.redmond.microsoft.com:instancename redmond\accountname

Aby uzyskać więcej informacji na temat konfiguracji zawsze włączonej grupy dostępności, zobacz Odbiorniki i Kerberos (SPN).

Połączenia klienta

Nazwy SPN określone przez użytkownika są obsługiwane przez sterowniki klienckie. Jeśli jednak nie podano nazwy SPN, jest ona generowana automatycznie na podstawie typu połączenia klienta. W przypadku połączenia TCP nazwa SPN w formacie MSSQLSvc/FQDN:[<port>] jest używana zarówno dla wystąpień nazwanych, jak i domyślnych.

W przypadku nazwanych potoków i połączeń pamięci współużytkowanej, SPN w formacie MSSQLSvc/<FQDN>:<instancename> jest używany dla nazwanego wystąpienia, a MSSQLSvc/<FQDN> dla wystąpienia domyślnego.

Użyj konta usługi jako SPN

Konta usługowe mogą być używane jako SPN. Są one określane za pomocą atrybutu połączenia dla uwierzytelniania Kerberos i mają następujące formaty:

  • username\@domain lub domain\username dla konta użytkownika domeny

  • machine$\@domain lub host\FQDN dla konta domeny komputera, takiego jak Local System lub NETWORK SERVICE.

Aby określić metodę uwierzytelniania połączenia, wykonaj następujące zapytanie.

SELECT net_transport, auth_scheme
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;

Wartości domyślne uwierzytelniania

W poniższej tabeli opisano wartości domyślne uwierzytelniania, które są używane w oparciu o scenariusze rejestracji nazwy SPN.

Scenariusz Metoda uwierzytelniania
SPN jest przypisany do poprawnego konta domeny, konta wirtualnego, konta MSA lub wbudowanego konta. Na przykład Local System lub NETWORK SERVICE. Połączenia lokalne używają protokołu NTLM, połączenia zdalne używają protokołu Kerberos.
Nazwa SPN jest prawidłowym kontem domeny, kontem wirtualnym, kontem MSA lub wbudowanym kontem. Połączenia lokalne używają protokołu NTLM, połączenia zdalne używają protokołu Kerberos.
Nazwa SPN jest mapowana na nieprawidłowe konto domeny, konto wirtualne, konto MSA lub wbudowane konto Uwierzytelnianie kończy się niepowodzeniem.
Wyszukiwanie głównej nazwy usługi kończy się niepowodzeniem albo nie mapuje się do poprawnego konta domeny, konta wirtualnego, konta MSA lub wbudowanego konta bądź samo nie jest poprawnym kontem domeny, kontem wirtualnym, kontem MSA lub wbudowanym kontem. Połączenia lokalne i zdalne używają protokołu NTLM.

Notatka

poprawna oznacza, że konto przypisane do zarejestrowanego SPN jest kontem, pod którym działa usługa SQL Server.

Uwagi

Dedykowane połączenie administratora (DAC) używa nazwy SPN opartej na nazwie wystąpienia. Uwierzytelnianie Kerberos może być używane z DAC, jeśli ta nazwa SPN została pomyślnie zarejestrowana. Alternatywnie użytkownik może określić nazwę konta jako nazwę SPN.

Jeśli rejestracja nazwy SPN nie powiedzie się podczas uruchamiania, ten błąd jest rejestrowany w dzienniku błędów programu SQL Server i trwa uruchamianie.

Jeśli wyrejestrowanie nazwy SPN kończy się niepowodzeniem w trakcie zamykania, ten błąd jest zapisywany w dzienniku błędów programu SQL Server, a proces zamykania jest kontynuowany.