Rotieren von Schlüsseltabellen für SQL Server unter Linux
Gilt für: SQL Server – Linux
Abhängig von den bewährten Sicherheitsmethoden in Ihrer Organisation müssen Sie möglicherweise regelmäßig das Kennwort für das Windows Active Directory-Konto rotieren, das als network.privilegedadaccount in mssql.conf angegeben ist bzw. für ein anderes Konto, das Besitzer der Dienstprinzipalnamen für den SQL Server-Dienst ist. In diesem Artikel ist die unterstützte Methode zum Ändern des Kennworts für das Konto dokumentiert. Die Kennwortänderung wird wirksam, ohne dass der SQL Server-Dienst unter Linux neu gestartet werden muss.
Die Schlüsseltabelle wird mithilfe des Tools adutil aktualisiert. Der adutil-Befehl muss auf einem Computer ausgeführt werden, der in die Domäne eingebunden ist. Weitere Informationen zu adutil sowie dazu, wie Sie das Tool herunterladen, finden Sie unter Einführung in adutil – Active Directory-Hilfsprogramm.
Vor der Aktualisierung in Active Directory muss das neue Kennwort in der Schlüsseltabelle mit der nächsten kvno-Nummer aktualisiert werden. Durch die Verwendung der nächsten kvno-Nummer wird verhindert, dass der SQL Server-Dienst nach der Kennwortänderung neu gestartet werden muss. Wenn Sie das Kennwort zuerst in Active Directory aktualisieren und dann die Schlüsseltabelle ändern, muss der SQL Server-Dienst für eine ordnungsgemäße Funktionsweise der Active Directory-Authentifizierung neu gestartet werden.
Szenario für die Rotation der Schlüsseltabelle
Wir sehen uns hierzu ein Beispiel an. Die Active Directory-Authentifizierung ist unter Linux bereits für SQL Server aktiviert. In der Datei mssql.conf wurde network.privilegedadaccount auf sqluser
festgelegt. Das Konto sqluser@CONTOSO.COM
wurde in Active Directory bereits erstellt, und die Schlüsseltabelle wurde ebenfalls am Standardspeicherort /var/opt/mssql/secrets/mssql.keytab
erstellt. Nun soll das Kennwort für sqluser@CONTOSO.COM
geändert werden. Führen Sie dazu folgende Schritte aus:
Installieren Sie adutil auf dem in der Domäne eingebundenen Computer.
Erwerben oder erneuern Sie das Kerberos-TGT (Ticket-Granting Ticket) mithilfe des
kinit
-Befehls. Verwenden Sie ein privilegiertes Konto für denkinit
-Befehl. Das Konto muss über die Berechtigung zum Herstellen einer Verbindung mit der Domäne verfügen. Außerdem sollte es in der Lage sein, Konten und Dienstprinzipalnamen in der Domäne zu erstellen. In diesem Fall verwenden wir das Konto privilegeduser@CONTOSO.COM, das über die Berechtigung zum Erstellen von Konten und Dienstprinzipalnamen in unserer Domäne CONTOSO.COM verfügt.kinit privilegeduser@CONTOSO.COM
Nachdem Sie
kinit
zum Abrufen bzw. Erneuern des TGT ausgeführt haben, fragen Sie die aktuelle kvno-Nummer von network.privilegedadaccount ab. In diesem Fall ist diessqluser@CONTOSO.COM
.kvno sqluser@CONTOSO.COM
Sie können die Schlüsseltabelle mithilfe von mssql-conf drehen oder mithilfe von adutil die Schlüsseltabelle manuell drehen.
Drehen der Schlüsseltabellen mit mssql-conf
Sie können adutil installieren und in mssql-conf integrieren. Dies bedeutet, dass Sie die Schlüsseltabelle mithilfe von mssql-conf drehen können.
Melden Sie sich als Stammbenutzer (Root) an, und wechseln Sie zum Benutzer
mssql
.su mssql
Erwerben oder erneuern Sie das Kerberos-TGT (Ticket-Granting Ticket) mithilfe des
kinit
-Befehls. Verwenden Sie ein privilegiertes Konto für denkinit
-Befehl. Das Konto muss über die Berechtigung zum Herstellen einer Verbindung mit der Domäne verfügen. Außerdem sollte es in der Lage sein, Konten und Dienstprinzipalnamen in der Domäne zu erstellen. In diesem Fall verwenden wir das Konto privilegeduser@CONTOSO.COM, das über die Berechtigung zum Erstellen von Konten und Dienstprinzipalnamen in unserer Domäne CONTOSO.COM verfügt.kinit privilegeduser@CONTOSO.COM
Führen Sie den Befehl mssql-conf aus, und geben Sie die SQL Server-Schlüsseltabelle und die Details zu network.privilegedadaccount an. Der
privilegedadaccount
ist in diesem Beispielsqluser
../mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser --use-next-kvno'
Wenn Sie zur Eingabe eines Kennworts aufgefordert werden, geben Sie ein neues Kennwort ein, das Sie verwenden möchten. Die Option
--use-next-kvno
ordnet die aktuelle kvno + 1 zu.Optional: Sie können auch die Option
--kvno
mit dem mssql-conf-Befehlsetup-ad-keytab
verwenden, um eine bestimmte kvno bereitzustellen. Sie müssen sicherstellen, dass Sie zuerst die aktuelle kvno für den Benutzer abrufen, und dann die neue kvno entsprechend aktualisieren, die die aktuelle kvno +1 wäre.Sie können die Schlüssel der Schlüsseltabelle mit dem folgenden Befehl auflisten:
klist -kte /var/opt/mssql/secrets/mssql.keytab
Sie werden feststellen, dass die Schlüsseltabelle mit der nächsten kvno sowohl für die Benutzer- als auch für die SPN-Einträge aktualisiert wird.
Nun können Sie das Kennwort für den Benutzer
sqluser
ändern. Hier finden Sie ein Beispiel.Wichtig
Wenn Sie während dieses Schritts aufgefordert werden, SQL Server neu zu starten, können Sie dies ignorieren. Denken Sie daran, das Kennwort auch in Active Directory zu ändern.
bash-4.4$ kinit privilegedaccount@CONTOSO.COM Password for privilegedaccount@CONTOSO.COM: bash-4.4$ ./mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser --use-next-kvno sqluser@contoso.com's password: Confirm sqluser@contoso.com's password: SQL Server needs to be restarted in order to adopt the new AD configuration, please run 'systemctl restart mssql-server.service'. bash-4.4$ klist -kte /var/opt/mssql/secrets/mssql.keytab Keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab KVNO Timestamp Principal ---- ------------------- ------------------------------------------------------ 4 12/30/2021 14:02:08 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 4 12/30/2021 14:02:08 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96) 5 12/30/2021 20:06:34 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96) 5 12/30/2021 20:06:34 MSSQLSvc/sql1.contoso.com:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 5 12/30/2021 20:06:34 MSSQLSvc/sql1.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96) 5 12/30/2021 20:06:34 MSSQLSvc/sql1:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96) 5 12/30/2021 20:06:34 MSSQLSvc/sql1@CONTOSO.COM (aes256-cts-hmac-sha1-96)
Manuelles Drehen der Schlüsseltabelle mit adutil
Wenn Sie die Schlüsseltabelle manuell mithilfe von adutil aktualisieren möchten, halten Sie sich an die folgenden Schritte.
Beim Aktualisieren der Schlüsseltabelle mithilfe von adutil wird ein Eintrag in die aktuelle Schlüsseltabelle eingefügt. Wenn die mit dem vorherigen Befehl abgerufene kvno-Nummer 2
lautet, verwenden Sie beim Aktualisieren der Schlüsseltabelle die kvno-Nummer 3
. Nachfolgend sind die adutil-Befehle aufgeführt, die Sie ausführen müssen.
- Ändern Sie die Portnummer (-p), den Hostnamen (-H), den Pfad zur Schlüsseltabelle (-k) und die kvno-Nummer in die entsprechenden Werte Ihrer Umgebung.
adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H mssql.contoso.com --password '<newpassword>' -s MSSQLSvc --kvno 3
adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password '<newpassword>' --kvno 3
-k: der Pfad zur aktuellen Schlüsseltabelle, die von SQL Server verwendet wird. Dieser Wert wird über die Option network.kerberoskeytabfile in der Datei mssql.conf festgelegt.
-H: der vollqualifizierte Domänenname des SQL Server-Hosts.
-p: der Port, an dem der SQL Server-Dienst lauscht (im ersten Befehl konfiguriert). Im zweiten Befehl steht -p für das Konto network.privilegedadaccount, dessen Kennwort aktualisiert wird.
kvno: die aktuelle kvno-Nummer + 1. Der aktuelle kvno-Wert wird in Schritt 3 abgerufen.
Nachdem Sie die oben aufgeführten Befehle ausgeführt haben, müssen Sie den Verschlüsselungstyp für die Einträge in der Schlüsseltabelle angeben. Stellen Sie sicher, dass Sie den richtigen Verschlüsselungstyp für Ihre Umgebung auswählen.
Überprüfen der Einträge in der Schlüsseltabelle
Nachdem Sie die Schlüsseltabelle aktualisiert haben, sollten die Einträge in der Schlüsseltabelle für kvno 3
(neu) und kvno 2
(alt) für das Konto sqluser@CONTOSO.COM
und die Dienstprinzipalnamen angezeigt werden. Sie können den folgenden Befehl klist
ausführen, um die Einträge in der Schlüsseltabelle zu überprüfen:
klist -kte /var/opt/mssql/secrets/mssql.keytab
Ändern des Kontokennworts in Active Directory
Im letzten Schritt wird das Kennwort von network.privilegedadaccount bzw. des Kontos aktualisiert, das Besitzer der SQL Server-Dienstprinzipalnamen in Windows Active Directory ist. Im obigen Szenario muss das Kennwort für sqluser@CONTOSO.COM
in Active Directory aktualisiert werden. Ändern Sie das Kennwort in den <newpassword>
-Wert, den Sie in Schritt 3 im vorherigen Abschnitt angegeben haben. Die Active Directory-Authentifizierung sollte weiterhin funktionieren, ohne dass der SQL Server-Dienst neu gestartet werden muss.
Zugehöriger Inhalt
- Verwenden von adutil zum Konfigurieren der Active Directory-Authentifizierung mit SQL Server für Linux
- Konfigurieren der Active Directory-Authentifizierung mit SQL Server für Linux-Container
- Grundlegendes zur Active Directory-Authentifizierung für SQL Server für Linux und Container
- Problembehandlung für Active Directory-Authentifizierung für SQL Server für Linux und Container