Obsługa głównej nazwy usługi (SPN) w połączeniach klienckich w kliencie natywnym programu SQL Server
Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)
Ważny
klienta natywnego programu SQL Server (SNAC) nie jest dostarczany z:
- SQL Server 2022 (16.x) i nowsze wersje
- SQL Server Management Studio 19 i nowsze wersje
Program SQL Server Native Client (SQLNCLI lub SQLNCLI11) oraz starszy dostawca microsoft OLE DB dla programu SQL Server (SQLOLEDB) nie są zalecane w przypadku tworzenia nowych aplikacji.
W przypadku nowych projektów użyj jednego z następujących czynników:
- sterownik Microsoft ODBC dla programu SQL Server
- sterownik Microsoft OLE DB dla programu SQL Server
W przypadku programu SQLNCLI, który jest dostarczany jako składnik aparatu bazy danych programu SQL Server (wersje 2012–2019), zobacz ten wyjątek cyklu wsparcia .
Począwszy od programu SQL Server 2008 (10.0.x), obsługa głównych nazw usług (SPN) została rozszerzona w celu umożliwienia wzajemnego uwierzytelniania we wszystkich protokołach. W poprzednich wersjach programu SQL Server nazwy SPN były obsługiwane tylko dla protokołu Kerberos za pośrednictwem protokołu TCP, gdy domyślna nazwa SPN dla wystąpienia programu SQL Server została zarejestrowana w usłudze Active Directory.
Nazwy SPN są używane przez protokół uwierzytelniania w celu określenia konta, w którym działa wystąpienie programu SQL Server. Jeśli konto wystąpienia jest znane, uwierzytelnianie Kerberos może służyć do zapewnienia wzajemnego uwierzytelniania przez klienta i serwer. Jeśli konto wystąpienia nie jest znane, używane jest uwierzytelnianie NTLM, które zapewnia tylko uwierzytelnianie klienta przez serwer. Obecnie klient natywny programu SQL Server wykonuje wyszukiwanie uwierzytelniania, wyprowadzając nazwę SPN z nazwy wystąpienia i właściwości połączenia sieciowego. Wystąpienia programu SQL Server podejmą próbę zarejestrowania nazw SPN podczas uruchamiania lub można je zarejestrować ręcznie. Rejestracja nie powiedzie się jednak, jeśli nie ma wystarczających praw dostępu dla konta, które próbuje zarejestrować nazwy SPN.
Konta domeny i komputerów są automatycznie rejestrowane w usłudze Active Directory. Mogą one być używane jako nazwy SPN lub administratorzy mogą definiować własne nazwy SPN. Program SQL Server sprawia, że bezpieczne uwierzytelnianie jest bardziej zarządzane i niezawodne, umożliwiając klientom bezpośrednie określenie nazwy SPN do użycia.
Nuta
Nazwa SPN określona przez aplikację kliencką jest używana tylko w przypadku nawiązania połączenia ze zintegrowanymi zabezpieczeniami systemu Windows.
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.
Aby uzyskać więcej informacji na temat protokołu Kerberos, zobacz następujące artykuły:
Zwyczaj
W poniższej tabeli opisano najbardziej typowe scenariusze, w których aplikacje klienckie mogą włączyć bezpieczne uwierzytelnianie.
Scenariusz | Opis |
---|---|
Starsza aplikacja nie określa nazwy SPN. | Ten scenariusz zgodności gwarantuje, że nie będzie żadnych zmian zachowania aplikacji opracowanych dla poprzednich wersji programu SQL Server. Jeśli nie określono nazwy SPN, aplikacja opiera się na wygenerowanych nazwach SPN i nie ma wiedzy o tym, która metoda uwierzytelniania jest używana. |
Aplikacja kliencka korzystająca z bieżącej wersji klienta natywnego programu SQL Server określa nazwę SPN w parametrach połączenia jako konto użytkownika domeny lub komputera, jako nazwę SPN specyficzną dla wystąpienia lub jako ciąg zdefiniowany przez użytkownika. | Aby wykonać następujące czynności, można użyć słowa kluczowego ServerSPN w dostawcy, inicjowaniu lub parametrach połączenia: -Określ konto używane przez wystąpienie programu SQL Server na potrzeby połączenia. Upraszcza to dostęp do uwierzytelniania Kerberos. Jeśli centrum dystrybucji kluczy Kerberos (KDC) jest obecne i określono prawidłowe konto, uwierzytelnianie Kerberos jest bardziej prawdopodobne niż NTLM. Centrum dystrybucji kluczy zwykle znajduje się na tym samym komputerze co kontroler domeny. -Określ nazwę SPN, aby wyszukać konto usługi dla wystąpienia programu SQL Server. Dla każdego wystąpienia programu SQL Server są generowane dwie domyślne nazwy SPN, które mogą być używane w tym celu. Te klucze nie są gwarantowane w usłudze Active Directory, więc w tej sytuacji uwierzytelnianie Kerberos nie jest gwarantowane. -Określ nazwę SPN, która będzie używana do wyszukiwania konta usługi dla wystąpienia programu SQL Server. Może to być dowolny ciąg zdefiniowany przez użytkownika, który mapuje się na konto usługi. W takim przypadku klucz musi być zarejestrowany ręcznie w centrum dystrybucji kluczy i musi spełniać reguły dla nazwy SPN zdefiniowanej przez użytkownika. Za pomocą słowa kluczowego failoverPartnerSPN można określić nazwę SPN serwera partnera trybu failover. Zakres wartości konta i klucza usługi Active Directory jest taki sam jak wartości, które można określić dla serwera głównego. |
Aplikacja ODBC określa nazwę SPN jako atrybut połączenia dla serwera głównego lub serwera partnera trybu failover. | Atrybut połączenia SQL_COPT_SS_SERVER_SPN może służyć do określania nazwy SPN dla połączenia z serwerem głównym. Atrybut połączenia SQL_COPT_SS_FAILOVER_PARTNER_SPN można użyć do określenia nazwy SPN dla serwera partnera trybu failover. |
Aplikacja OLE DB określa nazwę SPN jako właściwość inicjowania źródła danych dla serwera głównego lub serwera partnera trybu failover. | Właściwość połączenia SSPROP_INIT_SERVER_SPN w zestawie właściwości DBPROPSET_SQLSERVERDBINIT może służyć do określania nazwy SPN dla połączenia. Właściwość połączenia SSPROP_INIT_FAILOVER_PARTNER_SPN w DBPROPSET_SQLSERVERDBINIT może służyć do określenia nazwy SPN dla serwera partnera trybu failover. |
Użytkownik określa nazwę SPN dla serwera lub serwera partnera trybu failover w nazwie źródła danych ODBC (DSN). | Nazwę SPN można określić w nazwach DSN ODBC za pośrednictwem okien dialogowych konfiguracji DSN. |
Użytkownik określa nazwę SPN serwera lub serwera partnera trybu failover w linku danych OLE |
Nazwę SPN można określić w oknie dialogowym Data Link lub Login. W oknie dialogowym logowania |
Aplikacja ODBC określa metodę uwierzytelniania używaną do nawiązywania połączenia. | Po pomyślnym otwarciu połączenia aplikacja może wysłać zapytanie do atrybutu połączenia SQL_COPT_SS_INTEGRATED_AUTHENTICATION_METHOD w celu określenia, która metoda uwierzytelniania została użyta. Wartości będą obejmować, ale nie są ograniczone do NTLM i Kerberos. |
Aplikacja OLE DB określa metodę uwierzytelniania używaną do nawiązywania połączenia. | Po pomyślnym otwarciu połączenia aplikacja może wysłać zapytanie do właściwości połączenia SSPROP_AUTHENTICATION_METHOD w DBPROPSET_SQLSERVERDATASOURCEINFO właściwości, aby określić, która metoda uwierzytelniania została użyta. Wartości będą obejmować, ale nie są ograniczone do NTLM i Kerberos. |
Tryb failover
Nazwy SPN nie są przechowywane w pamięci podręcznej trybu failover i dlatego nie mogą być przekazywane między połączeniami. Nazwy SPN będą używane we wszystkich próbach połączenia z podmiotem zabezpieczeń i partnerem, gdy określono je w parametrach połączenia lub atrybutach połączenia.
Buforowanie połączeń
Aplikacje powinny mieć świadomość, że określanie nazw SPN w niektórych, ale nie wszystkich parametrach połączenia może przyczynić się do fragmentacji puli.
Aplikacje mogą programowo określać nazwy SPN jako atrybuty połączenia, zamiast określać słowa kluczowe parametrów połączenia. Może to pomóc w zarządzaniu fragmentacją puli połączeń.
Aplikacje powinny mieć świadomość, że nazwy SPN w parametrach połączenia mogą zostać zastąpione przez ustawienie odpowiednich atrybutów połączenia, ale parametry połączenia używane przez buforowanie połączeń będą używać wartości parametrów połączenia do celów puli.
zachowanie serwera Down-Level
Nowe zachowanie połączenia jest implementowane przez klienta; dlatego nie jest specyficzna dla wersji programu SQL Server.
Połączone serwery i delegowanie
Po utworzeniu serwerów połączonych parametr @provstrsp_addlinkedserver może służyć do określania nazw SPN serwera i partnera trybu failover. Korzyści wynikające z tego są takie same jak określanie nazw SPN w parametrach połączenia klienta: Prostsze i bardziej niezawodne nawiązywanie połączeń korzystających z uwierzytelniania Kerberos.
Delegowanie z połączonymi serwerami wymaga uwierzytelniania Kerberos.
Aspekty zarządzania nazwami SPN określone przez aplikacje
Podczas wybierania, czy określić nazwy SPN w aplikacji (za pośrednictwem parametrów połączenia) lub programowo za pośrednictwem właściwości połączenia (zamiast polegać na domyślnych nazwach SPN wygenerowanych przez dostawcę), należy wziąć pod uwagę następujące czynniki:
Zabezpieczenia: Czy określona nazwa SPN ujawnia chronione informacje?
Niezawodność: Aby włączyć korzystanie z domyślnych nazw SPN, konto usługi, w którym działa wystąpienie programu SQL Server, musi mieć wystarczające uprawnienia do zaktualizowania usługi Active Directory w centrum dystrybucji kluczy.
Wygoda i przejrzystość lokalizacji: Jak wpłynie to na nazwy SPN aplikacji, jeśli jej baza danych zostanie przeniesiona do innego wystąpienia programu SQL Server? Dotyczy to zarówno serwera głównego, jak i partnera trybu failover, jeśli używasz dublowania bazy danych. Jeśli zmiana serwera oznacza, że nazwy SPN muszą zostać zmienione, jak będzie to miało wpływ na aplikacje? Czy jakiekolwiek zmiany będą zarządzane?
Określanie głównej nazwy usługi
Nazwę SPN można określić w oknach dialogowych i w kodzie. W tej sekcji omówiono sposób określania nazwy SPN.
Maksymalna długość nazwy SPN to 260 znaków.
Składnia używana przez nazwy SPN w parametrach połączenia lub atrybutach połączenia jest następująca:
Składnia | Opis |
---|---|
msSQLSvc/ |
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:port | Domyślna nazwa SPN wygenerowana przez dostawcę, gdy jest używany protokół TCP. port jest numerem portu TCP. |
MSSQLSvc/fqdn:InstanceName | Wygenerowana przez dostawcę domyślna nazwana nazwa protokołu, gdy jest używany protokół inny niż TCP. InstanceName jest nazwą wystąpienia programu SQL Server. |
HOST/ fqdn HOST/MachineName |
Nazwa SPN mapowana na wbudowane konta komputerów, które są automatycznie rejestrowane przez system Windows. |
nazwa użytkownika@ domeny | Bezpośrednia specyfikacja konta domeny. nazwa użytkownika to nazwa konta użytkownika systemu Windows. domena jest nazwą domeny systemu Windows lub w pełni kwalifikowaną nazwą domeny. |
MachineName$@Domain | Bezpośrednia specyfikacja konta komputera. (Jeśli serwer, z którym nawiązujesz połączenie, jest uruchomiony w obszarze KONTA SYSTEMU LOKALNEgo lub USŁUGI SIECIOWEJ, aby uzyskać uwierzytelnianie Kerberos, ServerSPN może być w formacie MachineName$@domain). |
KDCKey/MachineName | Określona przez użytkownika nazwa SPN. klucz KDCKey jest ciągiem alfanumerycznym zgodnym z regułami klucza KDC. |
Składnia ODBC i OLE DB obsługująca nazwy SPN
Aby uzyskać informacje specyficzne dla składni, zobacz następujące tematy:
Zobacz też
funkcji klienta natywnego programu SQL Server
rejestrowanie głównej nazwy usługi dla połączeń Kerberos