SQL-Benutzer auf Linux-Servern authentifizieren Microsoft SQL Server 2019/2022 auf Linux-Servern mit Active Directory
Anbieter zum Thema
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.

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.
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 sqlsvc
setspn -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.int
kvno sqlsvc@joos.int
kvno 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.keytab
sudo 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.keytab
sudo systemctl restart mssql-server
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:48521283)