Verbinding maken met de database-engine met Uitgebreide beveiliging

van toepassing op:SQL Server-

Uitgebreide beveiliging helpt verificatierelaisaanvallen te voorkomen door ervoor te zorgen dat de client de service kent waarmee deze verbinding maakt.

Uitgebreide beveiliging is een functie van de netwerkonderdelen die door het besturingssysteem zijn geïmplementeerd. Uitgebreide beveiliging wordt ondersteund in Windows.

SQL Server is veiliger wanneer verbindingen worden gemaakt met uitgebreide beveiliging.

Checklist met vereisten

Om uitgebreide beveiliging effectief te kunnen uitvoeren, moet aan alle volgende voorwaarden worden voldaan:

  1. Gebruik een clientstuurprogramma dat ondersteuning biedt voor kanaalbinding.
  2. Schakel TLS-versleuteling in voor de verbinding, zodat de client een kanaalbindingstoken (CBT) kan produceren.
  3. Maak verbinding met de juiste Service Principal Name (SPN) die overeenkomt met het SQL Server exemplaar.
  4. Gebruik Windows-verificatie (NTLM of Kerberos). Uitgebreide beveiliging is niet van toepassing op SQL-verificatie.
  5. Uitgebreide beveiliging inschakelen op het SQL Server-exemplaar (ingesteld op Toegestaan of Vereist).

Note

Zie Voorbeeld van verbindingsreeks voor een voorbeeld van een verbindingsreeks in C# die uitgebreide beveiliging ondersteunt.

Beschrijving van uitgebreide beveiliging

Extended Protection maakt gebruik van servicebinding en kanaalbinding om een verificatierelaisaanval te voorkomen. Bij een verificatierelaisaanval maakt een client die NTLM-verificatie kan uitvoeren (bijvoorbeeld Windows Explorer, Outlook, een .NET SqlClient-toepassing en anderen), verbinding met een aanvaller (bijvoorbeeld een schadelijke CIFS-bestandsserver). De aanvaller gebruikt de referenties van de cliënt om zich voor te doen als deze en te verifiëren bij een service (bijvoorbeeld een exemplaar van de Database-Engine).

Er bestaan twee variaties van deze aanval:

  • Bij een luringsaanval maakt de client vrijwillig verbinding met de aanvaller.

  • Bij een spoofing-aanval probeert de client verbinding te maken met een legitieme service, maar weet deze niet dat DNS, IP-routering of beide zijn vergiftigd om de verbinding naar de aanvaller om te leiden.

SQL Server ondersteunt servicebinding en kanaalbinding om deze aanvallen op SQL Server-exemplaren te verminderen.

Servicebinding

Servicebinding biedt bescherming tegen misleidingsaanvallen door een client te verplichten een ondertekende service principal name (SPN) te sturen van de SQL Server-service waarmee de client verbinding wil maken. Als onderdeel van het verificatieantwoord valideert de service dat de SPN die in het pakket is ontvangen, overeenkomt met zijn eigen SPN. Als een client wordt gelokt om verbinding te maken met een aanvaller, bevat de client de ondertekende SPN van de aanvaller. De aanvaller kan het pakket niet doorsturen om te verifiëren bij de echte SQL Server-service als de client, omdat het de SPN van de aanvaller zou bevatten. Voor servicebinding worden eenmalige, te verwaarlozen kosten in rekening gebracht, maar er worden geen spoofingaanvallen aangepakt. Servicebinding vindt plaats wanneer een clienttoepassing geen versleuteling gebruikt om verbinding te maken met de SQL Server.

Kanaalbekoppeling

Kanaalbinding brengt een beveiligd kanaal (Schannel) tot stand tussen een client en een exemplaar van de SQL Server-service. De service verifieert de echtheid van de client door het kanaalbindingstoken (CBT) van de client dat specifiek is voor dat kanaal te vergelijken met een eigen CBT. Kanaalbinding pakt zowel phishingaanvallen als spoofingaanvallen aan. Er worden echter grotere runtimekosten in rekening gebracht, omdat hiervoor TLS-versleuteling (Transport Layer Security) van al het sessieverkeer is vereist. Kanaalbinding vindt plaats wanneer een clienttoepassing versleuteling gebruikt om verbinding te maken met de SQL Server, ongeacht of versleuteling wordt afgedwongen door de client of door de server.

Waarschuwing

SQL Server en Microsoft gegevensproviders voor SQL Server ondersteuning bieden voor oudere protocollen, waaronder TLS 1.0 en SSL 3.0. Als u een ander protocol (zoals TLS 1.2 of TLS 1.3) afdwingt door wijzigingen aan te brengen in de SChannel-laag van het besturingssysteem, kunnen uw verbindingen met SQL Server mislukken. Zorg ervoor dat u de nieuwste build van SQL Server hebt ter ondersteuning van TLS 1.2 of TLS 1.3. Zie TLS 1.2 en TLS 1.3 voor meer informatie.

Ondersteuning voor besturingssystemen

De volgende koppelingen bieden meer informatie over hoe Windows uitgebreide beveiliging ondersteunt:

Ondersteuning voor stuurprogramma's

De enige stuurprogramma's die uitgebreide beveiliging ondersteunen, zijn Windows gebaseerd:

  • Microsoft ODBC-stuurprogramma voor SQL Server (alleen in Windows)
  • Microsoft OLE DB-stuurprogramma voor SQL Server
  • System.Data.SqlClient (in .NET Framework op Windows)
  • Microsoft.Data.SqlClient (in Windows)

Instellingen

Drie SQL Server verbindingsinstellingen zijn van invloed op servicebinding en kanaalbinding. U kunt deze instellingen configureren met behulp van de SQL Server Configuration Manager of WMI. Bekijk deze instellingen met behulp van het facet serverprotocolinstellingen van op beleid gebaseerd beheer.

Afdwingen van versleuteling

Mogelijke waarden zijn Ja en Nee. Als u kanaalbinding wilt gebruiken, stelt u Force Encryption in op Yes en moeten alle clients versleuteling gebruiken. Als dit Nee is, wordt alleen servicebinding gegarandeerd. Versleuteling afdwingen bevindt zich op de Protocollen voor MSSQLSERVER-eigenschappen (tabblad Vlaggen) in SQL Server Configuration Manager. Vanaf SQL Server 2022 (16.x) kunt u Ook Force Strict Encryption instellen op Ja voor sterkere beveiliging met behulp van TDS 8.0. Zie SQL Server Database Engine configureren voor het versleutelen van verbindingenvoor meer informatie.

Stel Versleutelings afdwingen in op Ja bij gebruik met Uitgebreide beveiliging.

Uitgebreide beveiliging

Mogelijke waarden zijn Uit, Toegestaan, en Vereist. Gebruik de variabele Extended Protection om het uitgebreide beveiligingsniveau in te stellen voor elk SQL Server exemplaar. U vindt Uitgebreide beveiliging op de protocollen voor MSSQLSERVER-eigenschappen (tabblad Geavanceerd) in SQL Server Configuration Manager.

  • Stel in op Uit om Uitgebreide beveiliging uit te schakelen. Het exemplaar van SQL Server accepteert verbindingen van elke client, ongeacht of de client is beveiligd of niet. Off is compatibel met oudere en niet-gepatchte besturingssystemen, maar is minder veilig. Gebruik deze instelling wanneer de clientbesturingssystemen geen uitgebreide beveiliging ondersteunen.

  • Ingesteld op Toegestaan om uitgebreide beveiliging te vereisen voor verbindingen van besturingssystemen die uitgebreide beveiliging ondersteunen. Uitgebreide beveiliging wordt genegeerd voor verbindingen van besturingssystemen die geen ondersteuning bieden voor Uitgebreide beveiliging. Verbindingen van niet-beveiligde clienttoepassingen die worden uitgevoerd op beveiligde clientbesturingssystemen, worden geweigerd. Deze instelling is veiliger dan Uit, maar dit is niet het veiligste. Gebruik deze instelling in gemengde omgevingen. Sommige besturingssystemen ondersteunen Extended Protection en andere niet.

  • Ingesteld op Vereist om alleen verbindingen van beveiligde toepassingen op beveiligde besturingssystemen te accepteren. Deze instelling is het veiligst, maar verbindingen van besturingssystemen of toepassingen die geen uitgebreide beveiliging ondersteunen, kunnen geen verbinding maken met SQL Server.

Zie Versleuteling inschakelen met Uitgebreide beveiliging voor meer informatie over aanbevolen instellingen.

Geaccepteerde NTLM SPN's

Geef de variabele Geaccepteerde NTLM SPNs op wanneer meer dan één SPN een server kent. Wanneer een client probeert verbinding te maken met de server met behulp van een geldige SPN die de server niet kent, mislukt de servicebinding. U kunt dit probleem voorkomen door verschillende SPN's op te geven die de server vertegenwoordigen met behulp van de geaccepteerde NTLM SPN's. Geaccepteerde NTLM SPN's is een reeks SPN's die door puntkomma's zijn gescheiden. Als u bijvoorbeeld de SPN's MSSQLSvc/HostName1.Contoso.com en MSSQLSvc/HostName2.Contoso.comwilt toestaan, typt u MSSQLSvc/HostName1.Contoso.com; MSSQLSvc/HostName2.Contoso.com in het vak Geaccepteerde NTLM SPN's. De variabele heeft een maximale lengte van 2048 tekens. U vindt geaccepteerde NTLM SPN's op de protocollen voor MSSQLSERVER-eigenschappen (geavanceerd tabblad) in SQL Server Configuration Manager.

Uitgebreide beveiliging inschakelen voor de database-engine

Als u Uitgebreide beveiliging wilt gebruiken, moeten zowel de server als de client een besturingssysteem hebben dat uitgebreide beveiliging ondersteunt en moet deze zijn ingeschakeld op het besturingssysteem. Zie Uitgebreide beveiliging voor verificatie voor meer informatie over het inschakelen van Uitgebreide beveiliging voor het besturingssysteem.

Uitgebreide beveiliging en NTLMv2 zijn standaard ingeschakeld in alle ondersteunde versies van Windows, uitgebreide beveiliging is niet standaard ingeschakeld voor SQL Server verbindingen. U moet deze handmatig inschakelen in SQL Server Configuration Manager.

Beheerders moeten de instellingen in SQL Server Configuration Manager configureren om Uitgebreide beveiliging in te schakelen voor SQL Server verbindingen. Deze configuratie omvat opties voor servicebinding en kanaalbinding om verschillende typen verificatierelaisaanvallen te beperken. Raadpleeg de SQL Server documentatie over het configureren van Uitgebreide beveiliging voor gedetailleerde instructies.

Versleuteling met uitgebreide beveiliging inschakelen

Van toepassing op: SQL Server

Als u de beveiliging wilt verbeteren wanneer u Windows authentication gebruikt, stelt u Uitgebreide beveiliging in op Vereist en Versleuteling afdwingen op Ja in SQL Server Configuration Manager.

Deze instellingen bieden de veiligste configuratie voor SQL Server.

Note

Gebruik in SQL Server 2022 (16.x) en latere versies Force Strict Encryption in plaats van Force Encryption om een sterkere beveiliging mogelijk te maken via TDS 8.0.

Werk uw verbindingsreeksen bij om aan deze wijzigingen te voldoen.

Voor meer informatie, zie:

Nadat u Uitgebreide beveiliging hebt ingeschakeld

Nadat u Uitgebreide beveiliging op de servercomputer hebt ingeschakeld, gebruikt u de volgende stappen om Uitgebreide beveiliging in te schakelen:

  1. Ga naar SQL Server Configuration Manager vanuit het menu Start van Windows.

  2. Vouw SQL Server netwerkconfiguratie uit en klik vervolgens met de rechtermuisknop op Protocollen voor<InstanceName>. Selecteer Eigenschappen.

  3. Stel op het tabblad Geavanceerduitgebreide beveiliging in op de juiste instelling voor zowel kanaalbinding als servicebinding.

  4. Als meerdere SPN's een server kennen, configureert u desgewenst het veld Geaccepteerde NTLM SPN's op het tabblad Geavanceerd , zoals beschreven in de sectie Instellingen .

  5. Voor kanaalbinding stelt u op het tabblad VlaggenVersleuteling afdwingen in op Ja. Deze instelling wordt aanbevolen.

  6. Start de Database Engine-service opnieuw.

Andere SQL Server-onderdelen configureren

Zie Uitgebreide beveiliging voor verificatie met Reporting Services voor meer informatie over het configureren van Reporting Services.

Wanneer u IIS gebruikt voor toegang tot Analysis Services-gegevens met een HTTP- of HTTPS-verbinding, kan Analysis Services profiteren van uitgebreide beveiliging die wordt geleverd door IIS. Zie Uitgebreide beveiliging configureren in IIS 7.5voor meer informatie over het configureren van IIS voor het gebruik van uitgebreide beveiliging.

Voorbeeld van verbindingsreeks

In het volgende C#-voorbeeld gebruikt de verbindingsreeks Windows authentication (Integrated Security=true). Het token voor kanaalbinding is ingeschakeld via TLS-versleuteling (Encrypt=true). Certificaatvalidatie wordt afgedwongen met TrustServerCertificate=false. Hoewel dit niet vereist is, HostNameInCertificate wordt aanbevolen en opgenomen in dit voorbeeld.

using (var conn = new SqlConnection(
    "Server=sql01.contoso.com;" +
    "Database=AdventureWorks2025;" +
    "Integrated Security=true;" +        
    "Encrypt=true;" +                   
    "TrustServerCertificate=false;" +    
    "HostNameInCertificate=sql01.contoso.com;")) 
{
    conn.Open();
}