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:

  1. Installieren Sie adutil auf dem in der Domäne eingebundenen Computer.

  2. Erwerben oder erneuern Sie das Kerberos-TGT (Ticket-Granting Ticket) mithilfe des kinit-Befehls. Verwenden Sie ein privilegiertes Konto für den kinit-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
    
  3. 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 dies sqluser@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.

  1. Melden Sie sich als Stammbenutzer (Root) an, und wechseln Sie zum Benutzer mssql.

    su mssql
    
  2. Erwerben oder erneuern Sie das Kerberos-TGT (Ticket-Granting Ticket) mithilfe des kinit-Befehls. Verwenden Sie ein privilegiertes Konto für den kinit-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
    
  3. 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 Beispiel sqluser.

    ./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-Befehl setup-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.

  4. 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.

  5. 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.