SQL-Benutzer auf Linux-Servern authentifizieren SQL Server auf Linux-Servern mit Active Directory

Von Thomas Joos

Microsoft SQL Server 2019/2022 kann auch auf Linux und innerhalb von Docker-Containern installiert werden. Hier gibt es die Möglichkeit zur Anbindung an Active Directory. Dieser Beitrag zeigt die Vorgehensweise.

Microsoft SQL Server 2019/2022 auf Linux-Servern installieren: So geht’s.
Microsoft SQL Server 2019/2022 auf Linux-Servern installieren: So geht’s.
(Bild: marrakeshh - stock.adobe.com)

Wenn Microsoft SQL Server 2019/2022 in Windows zum Einsatz kommt, können Admins auf die „integrierte“ Authentifizierung setzen. Hier kann der SQL-Server die Anmeldung am Windows-PC oder generell an Active Directory nutzen, um Benutzer zu authentifizieren. Die Vorteile dabei sind, dass auf dem SQL-Server keine Anmeldedaten gespeichert werden müssen und keine externe Benutzerverwaltung notwendig ist. Dazu kommt, dass Unternehmen ihr Active Directory noch umfassender nutzen können, auch für Datenbankserver.

Bildergalerie

SQL-Server auf Linux-Servern mit Active Directory verbinden

Damit auf SQL-Servern eine Authentifizierung über Active Directory durchgeführt werden kann, muss der Datenbankserver natürlich zunächst mit Active Directory verknüpft werden. Sinnvoll ist an dieser Stelle das Anlegen eines neuen Benutzerkontos in Active Directory, das für die Verbindung zwischen dem SQL-Server und dem AD zum Einsatz kommt. Microsoft empfiehlt die Verwendung eines Benutzerkontos, dessen Kennwort nicht abläuft. Das Anlegen kann über die GUI mit „dsa.msc“ erfolgen oder in der PowerShell mit:

New-ADUser sqlsvc -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true

Dieses Konto sollte idealerweise nur für diesen Zweck zum Einsatz kommen und aus Sicherheitsgründen nicht für andere Dienste genutzt werden. Das Konto kann zum Beispiel die Bezeichnung „sqlsvc“ erhalten. Im Anschluss kann der Dienstprinzipalnamen (Service Principle Name, SPN) für den Datenbankserver angelegt werden. Dazu kommt das Befehlszeilentool „setspn.exe“ zum Einsatz. Wichtig ist an dieser Stelle, dass der komplette FQDN des Servers genutzt wird. Der Befehl sieht folgendermaßen aus:

setspn -A MSSQLSvc/<FQDN des SQL-Servers>:1433 sqlsvcsetspn -A MSSQLSvc/<NetBIOS-Name des SQL-Servers>:1433 sqlsvc

Wenn das Benutzerkonto und der SPN für den SQL-Server bereitstehen, kann im Anschluss die Keytab-Datei erstellt werden. Sie brauchen dazu die Schlüsselversionsnummer (Key Version Number, KVNO) des erstellten Benutzers. Diese Nummer lässt sich zum Beispiel in der PowerShell mit dem folgenden Befehl anzeigen:

get-adcomputer <Hostname> -property msDS-KeyVersionNumber

In den meisten Fällen ist bei „msDS-KeyVersionNumber“ die Nummer 2 zu sehen. Die Nummer wird benötigt, um auf dem Linux-Server mit „ktpass“ für jede SPN einen KEYTAB-Eintrag zu erstellen.

Linux-Server für Active-Directory-Verbindung vorbereiten

Auf dem Linux-Server erfolgt die Verbindung mit dem Benutzer, der für SQL-Server zum Einsatz kommen soll. Dazu werden folgende Befehle verwenden:

kinit sqlsvc@joos.intkvno sqlsvc@joos.intkvno MSSQLSvc/sql.joos.int:1433@joos.int

Die Namen des Benutzers, des Servers und der Domäne müssen natürlich an die jeweilige Umgebung angepasst werden. Der Vorgang dauert einige Zeit. Der Befehl muss ohne Fehlermeldung abgeschlossen werden. Danach werden über „ktpass“ für die SPN, die im Vorfeld angelegt wurde, KEYTAB-Einträge erstellt. Hier spielt auch die KVNO eine Rolle, die im Vorfeld ausgelesen wurde:

ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <StrongPassword>

Wenn alles richtig abgelaufen ist, sollte es jetzt die Datei „mssql.keytab“ geben. Diese Datei muss auf dem SQL-Server in das Verzeichnis „/var/opt/mssql/secrets“ kopiert werden. Um die Sicherheit zu optimieren, kann die Datei vor Zugriffen geschützt werden:

sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytabsudo chmod 400 /var/opt/mssql/secrets/mssql.keytab

Im Anschluss kann mit der „mssql-conf“ festgelegt werden, dass der SQL-Server in Zukunft die erstellte Keytab-Datei für die Authentifizierung nutzen soll:

sudo mssql-conf set network.privilegedadaccount <Benutzer>sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytabsudo systemctl restart mssql-server
Bildergalerie

Anmeldungen für Active Directory als SQL-Abfrage erstellen

Ob die Konfiguration bis an diese Stelle funktioniert hat, lässt sich durch eine T-SQL-Abfrage überprüfen, in der eine neue Anmeldung an der Domäne durchgeführt wird. Dazu kann zum Beispiel folgende Abfrage verwendet werden:

CREATE LOGIN [CONTOSO\user] FROM WINDOWS;SELECT name FROM sys.server_principals;

Auch hier muss auf den richtigen Benutzer geachtet werden. Wenn sich Benutzer an einem Clientcomputer anmelden, können sie auf die SQL-Datenbanken zugreifen, für die sie berechtigt sind, ohne weitere Anmeldungen durchführen zu müssen.

(ID:48565068)

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Softwareentwicklung und DevOps

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung