Udostępnij za pośrednictwem


Używanie szyfrowania bez walidacji w kliencie natywnym programu SQL Server

Dotyczy:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

Ważne

Klient natywny SQL Servera (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 sterowników:

W przypadku programu SQLNCLI dostarczanego jako składnik aparatu bazy danych programu SQL Server (wersje 2012–2019), proszę sprawdzić wyjątek cyklu wsparcia .

Program SQL Server zawsze szyfruje pakiety sieciowe skojarzone z logowaniem. Jeśli podczas uruchamiania nie zainicjowano obsługi administracyjnej certyfikatu, program SQL Server generuje certyfikat z podpisem własnym używany do szyfrowania pakietów logowania.

Certyfikaty z podpisem własnym nie gwarantują bezpieczeństwa. Zaszyfrowane uzgadnianie jest oparte na NT LAN Manager (NTLM). Aby zapewnić bezpieczną łączność, należy aprowizować weryfikowalny certyfikat w programie SQL Server. Protokół TLS (Transport Security Layer) można zabezpieczyć tylko za pomocą weryfikacji certyfikatu.

Aplikacje mogą również żądać szyfrowania całego ruchu sieciowego przy użyciu słów kluczowych parametrów połączenia lub właściwości połączenia. Słowa kluczowe to "Szyfruj" dla odBC i OLE DB w przypadku używania ciągu dostawcy z elementami IDbInitialize::Initializelub "Użyj szyfrowania dla danych" dla ADO i OLE DB podczas używania ciągu inicjowania za IDataInitializepomocą polecenia . Można to również skonfigurować za pomocą menedżera konfiguracji programu SQL Server przy użyciu opcji Wymuszanie szyfrowania protokołu i przez skonfigurowanie klienta do żądania zaszyfrowanych połączeń. Domyślnie szyfrowanie całego ruchu sieciowego dla połączenia wymaga aprowizowania certyfikatu na serwerze. Ustawiając klienta, aby ufał certyfikatowi na serwerze, jesteś narażony na ataki typu man-in-the-middle. Jeśli wdrożysz weryfikowalny certyfikat na serwerze, upewnij się, że zmienisz ustawienia klienta dotyczące zaufania certyfikatowi na FALSE.

Aby uzyskać informacje o słowach kluczowych parametrów połączenia, zobacz Using Connection String Keywords with SQL Server Native Client (Używanie słów kluczowych parametrów połączenia z klientem natywnym programu SQL Server).

Aby włączyć szyfrowanie, które ma być używane, gdy certyfikat nie jest aprowizowany na serwerze, można użyć menedżera konfiguracji programu SQL Server do ustawienia opcji Wymuszanie szyfrowania protokołu i certyfikatu serwera zaufania . W takim przypadku szyfrowanie używa certyfikatu serwera z podpisem własnym bez sprawdzania poprawności, jeśli na serwerze nie zainicjowano obsługi administracyjnej certyfikatu weryfikowalnego.

Aplikacje mogą również używać słowa kluczowego lub skojarzonego TrustServerCertificate z nim atrybutu połączenia, aby zagwarantować, że szyfrowanie odbywa się. Ustawienia aplikacji nigdy nie zmniejszają poziomu zabezpieczeń ustawionych przez program SQL Server Client Configuration Manager, ale mogą je wzmocnić. Jeśli na przykład dla klienta nie ustawiono szyfrowania wymuszonego protokołu , aplikacja może zażądać szyfrowania. Aby zagwarantować szyfrowanie nawet wtedy, gdy certyfikat serwera nie jest aprowizowany, aplikacja może zażądać szyfrowania i TrustServerCertificate. Jeśli TrustServerCertificate jednak nie jest włączona w konfiguracji klienta, aprowizowany certyfikat serwera jest nadal wymagany. W poniższej tabeli opisano wszystkie przypadki:

Wymuszanie ustawienia klienta szyfrowania protokołu Ustawienie klienta certyfikatu serwera zaufania Parametry połączenia/atrybut połączenia Szyfruj/Użyj szyfrowania danych Parametry połączenia/atrybut połączenia Certyfikat serwera zaufania Wynik
Nie. N/A Nie (ustawienie domyślne) Ignorowane Nie ma szyfrowania.
Nie. N/A Tak Nie (ustawienie domyślne) Szyfrowanie odbywa się tylko wtedy, gdy istnieje weryfikowalny certyfikat serwera, w przeciwnym razie próba połączenia zakończy się niepowodzeniem.
Nie. N/A Tak Tak Szyfrowanie zawsze występuje, ale może używać certyfikatu serwera z podpisem własnym.
Tak Nie. Ignorowane Ignorowane Szyfrowanie odbywa się tylko wtedy, gdy istnieje weryfikowalny certyfikat serwera, w przeciwnym razie próba połączenia zakończy się niepowodzeniem.
Tak Tak Nie (ustawienie domyślne) Ignorowane Szyfrowanie zawsze występuje, ale może używać certyfikatu serwera z podpisem własnym.
Tak Tak Tak Nie (ustawienie domyślne) Szyfrowanie odbywa się tylko wtedy, gdy istnieje weryfikowalny certyfikat serwera, w przeciwnym razie próba połączenia zakończy się niepowodzeniem.
Tak Tak Tak Tak Szyfrowanie zawsze występuje, ale może używać certyfikatu serwera z podpisem własnym.

Ostrzeżenie

Powyższa tabela zawiera jedynie przewodnik po zachowaniu systemu w różnych konfiguracjach. Aby zapewnić bezpieczną łączność, upewnij się, że zarówno klient, jak i serwer wymagają szyfrowania. Upewnij się również, że serwer ma weryfikowalny certyfikat i że TrustServerCertificate ustawienie na kliencie jest ustawione na FALSEwartość .

Dostawca OLE DB natywnego klienta programu SQL Server

Dostawca OLE DB natywnego klienta programu SQL Server obsługuje szyfrowanie bez walidacji przez dodanie SSPROP_INIT_TRUST_SERVER_CERTIFICATE właściwości inicjowania źródła danych, która jest implementowana w DBPROPSET_SQLSERVERDBINIT zestawie właściwości. Ponadto dodano nowe słowo kluczowe parametrów połączenia , TrustServerCertificate. Akceptuje yes lub no wartości; no jest wartością domyślną. W przypadku korzystania ze składników usługi akceptuje true lub false wartości; false jest wartością domyślną.

Aby uzyskać więcej informacji na temat ulepszeń zestawu DBPROPSET_SQLSERVERDBINIT właściwości, zobacz Inicjowanie i autoryzacja Właściwości (natywny dostawca OLE DB klienta natywnego).

Sterownik ODBC klienta natywnego programu SQL Server

Sterownik ODBC klienta natywnego programu SQL Server obsługuje szyfrowanie bez walidacji za pomocą dodatków do funkcji SQLSetConnectAttr i SQLGetConnectAttr . SQL_COPT_SS_TRUST_SERVER_CERTIFICATE dodano polecenie w celu zaakceptowania elementu SQL_TRUST_SERVER_CERTIFICATE_YES lub SQL_TRUST_SERVER_CERTIFICATE_NO, z SQL_TRUST_SERVER_CERTIFICATE_NO ustawieniem domyślnym. Ponadto dodano nowe słowo kluczowe parametrów połączenia , TrustServerCertificate. Akceptuje yes lub no wartości; no jest wartością domyślną.