Data Platform

Kerberos voor SQL Server (deel 1)

Kerberos voor SQL Server

In deze blog wil ik graag toelichten waar je rekening mee moet houden bij het ontwerpen van een server topologie met meerdere SQL servers die online data uitwisselen en die gebruik maakt van een single sign-on. Je krijgt dan te maken met het “double hop scenario” en het Kerberos protocol.

Double Hop Scenario

Veel voorkomende gevallen waarbij Kerberos een rol speelt zijn:

  • Een SSRS server die gegevens leest uit een SSAS kubus
  • Linked server connectie tussen twee verschillende SQL Servers
  • Rapporten in SharePoint die databronnen gebruiken die buiten de SharePoint farm staan

Dit staat bekend als het double hop scenario. De gebruiker maakt vanaf zijn of haar laptop gebruik van server 1. Server 1 haalt op zijn beurt weer gegevens op van server 2.

 

Double hop scenario
Double hop scenario

Kerberos is het protocol dat gebruikt wordt om het mogelijk te maken dat Server 1 de credentials van de gebruiker kan doorgeven aan server 2. Kerberos zorg er dus voor dat de credentials van de gebruiker automatisch kunnen worden doorgegeven aan de diverse netwerk onderdelen. Het is dus een belangrijk onderdeel van een single sign-on netwerk. De gebruiker zal niets merken van deze constructie en heeft probleemloos toegang tot de gegevens waar deze toe geauthoriseerd is.

Kerberos stelt je in staat om ervoor te zorgen dat de gebruiker alleen met gegevens kan werken waar deze toegang toe heeft. Doordat de gebruiker die is ingelogd op de PC ook bij beide servers bekend is kan er worden gewerkt met row-level security op de databron. Dit zorg voor een consistente beveiligingsstrategie van de gegevens als er naast de applicatie op server 1 ook nog andere manieren zijn om de gegevens te benaderen via bijvoorbeeld Excel of een rapportage tool.

Met het Kerberos protocol ben je niet beperkt tot een keten van twee servers (double hop) maar mogen er ook meerdere servers zijn (multi-hop).

Werking van het Kerberos protocol bij het ‘double hop scenario’
Werking van het Kerberos protocol bij het ‘double hop scenario’

Kerberos en SQL Server

SQL server kan ook gebruik maken van het Kerberos protocol om de credentials van de gebruiker te ontvangen of om door te geven aan een ander systeem. Voor een directe verbinding met SQL server is Kerberos niet noodzakelijk en kan ook gebruik worden gemaakt van het NLTM protocol. Voor een double hop is Kerberos echter verplicht. Met de volgende query kun je controleren of er connecties zijn die gebruik maken van Kerberos.

select net_transport, client_net_address, auth_scheme
from sys.dm_exec_connections

Een belangrijke indicatie dat Kerberos niet werkt is het volgende scenario: Je bent ingelogd op server 1 en alles werkt correct, maar vanaf een andere computer krijg je de volgende melding:

Foutmelding

Andere meldingen die kunnen verschijnen zijn:

  • Cannot generate SSPI context.
  • Login failed for user ‘(null)’.

Configuratie van Kerberos

Iedere keer weer blijkt Kerberos lastig om te configureren. Het is gemakkelijk om het verkeerd te doen.

In een Windows netwerk is Kerberos een typisch Active Directory (AD) verschijnsel. Om gebruik te kunnen maken van het Kerberos protocol dienen alle servers te zijn opgenomen in het Active Directory domein. Ook de configuratie zal voornamelijk plaatsvinden in AD. Dit is meteen ook het grootste struikelblok van Kerberos. In veel grotere organisaties is het beheer van AD voorbehouden aan de afdeling met AD beheerders en heb je als DBA of ontwikkelaar geen toegang tot het AD. AD beheer houdt zich voornamelijk bezig met de infrastructuur en user accounts terwijl Kerberos configuratie meer thuishoort bij applicatiebeheer. Om deze reden komen AD beheerders weinig in aanraking met Kerberos en heb ik meer dan eens moeten uitleggen wat Kerberos is en waar we het voor nodig hebben.

Een essentieel kenmerk van Kerberos is dat server 1 geauthoriseerd moet worden om de credentials van de gebruiker door te mogen geven aan server 2. Hiervoor dienen er SPN’S en Delegations te worden gecreëerd.

Een SPN is een ‘Service Principal Name’ en beschrijft welke service er voor Kerberos beschikbaar is op een server. Een delegation is een verwijzing naar een SPN van een andere server en maakt het mogelijk om een Kerberos ticket te kunnen uitwisselen met deze andere server.

Het configureren van Kerberos gebeurt in 5 stappen. De stappen dienen zo veel mogelijk in onderstaande volgorde te worden uitgevoerd.

  1. Aanpassen connection strings
  2. Herstart services met een AD service account
  3. Registreer SPN’s voor de service accounts
  4. Aanmaken delegations op service account
  5. Herstarten services

In mijn volgende blog zal ik deze stappen verder toelichten voor degen die Kerberos moeten gaan inrichten.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *