Tutorial: Verwenden von adutil zum Konfigurieren der Active Directory-Authentifizierung mit SQL Server für Linux

Gilt für: SQL Server – Linux

In diesem Tutorial wird erläutert, wie Sie die Windows Active Directory-Authentifizierung mit SQL Server für Linux mithilfe von adutil konfigurieren. Eine weitere Methode zum Konfigurieren der Active Directory-Authentifizierung ist die Verwendung von ktpass. Weitere Informationen finden Sie unter Tutorial: Verwenden der Active Directory-Authentifizierung für SQL Server für Linux.

Dieses Tutorial umfasst die folgenden Aufgaben:

  • Installieren von adutil
  • Verknüpfen eines Linux-Computers mit Ihrer Active Directory-Domäne
  • Erstellen eines Active Directory-Benutzers für SQL Server und Festlegen des Dienstprinzipalnamens (SPN) mithilfe von adutil
  • Erstellen der Schlüsseltabellendatei für den SQL Server-Dienst
  • Konfigurieren von SQL Server für die Verwendung der Schlüsseltabellendatei
  • Erstellen von Active Directory-basierten SQL Server-Anmeldeinformationen mit Transact-SQL
  • Herstellen einer Verbindung mit SQL Server mithilfe der Active Directory-Authentifizierung

Voraussetzungen

Vor dem Konfigurieren der Active Directory-Authentifizierung benötigen Sie Folgendes:

  • Einen Windows-Domänencontroller, auf dem Active Directory Domain Services in Ihrem Netzwerk ausgeführt wird
  • Das adutil-Tool, das auf einem in die Domäne eingebundenen Hostcomputer installiert ist

Vorbereitung des Domänencomputers

Stellen Sie sicher, dass in Active Directory ein Eintrag für den Weiterleitungshost (A) für die IP-Adresse des Linux-Hostcomputers hinzugefügt wurde. In diesem Tutorial lautet die IP-Adresse des sql1-Hostcomputers 10.0.0.10. Im folgenden Beispiel wird der Eintrag für den Weiterleitungshost in Active Directory hinzugefügt. Der Eintrag stellt sicher, dass Benutzer beim Herstellen einer Verbindung mit sql1.contoso.com an den richtigen Host weitergeleitet werden.

Screenshot, der das Hinzufügen eines Hosteintrags zeigt.

Für dieses Tutorial wird eine Umgebung in Azure mit drei virtuellen Computern (VMs) verwendet. Ein virtueller Computer ist der Windows Server-Computer mit dem Namen adVM.contoso.com, der als Domänencontroller (DC) mit dem Domänennamen contoso.com ausgeführt wird. Der zweite virtuelle Computer ist ein Clientcomputer mit Windows 10 mit dem Namen winbox, auf dem SQL Server Management Studio (SSMS) installiert ist. Der dritte Computer ist ein Ubuntu 18.04 LTS-Computer namens sql1, der SQL Server hostet.

Verknüpfen des Linux-Hostcomputers mit Ihrer Active Directory-Domäne

Weitere Informationen zur Verknüpfung von sql1 mit der Active Directory-Domäne finden Sie unter Verknüpfen von SQL Server auf einem Linux-Host mit einer Active Directory-Domäne.

Installieren von adutil

Führen Sie für die Installation von adutil die unter Einführung in adutil – Active Directory-Hilfsprogramm beschriebenen Schritte auf dem Hostcomputer aus, den Sie im vorherigen Schritt in die Domäne eingebunden haben.

Verwenden von adutil zum Erstellen eines Active Directory-Benutzers für SQL Server und Festlegen des Dienstprinzipalnamens (Service Principal Name, SPN)

  1. Erwerben oder erneuern Sie das Kerberos-TGT (Ticket-Granting Ticket) mithilfe des kinit-Befehls. Sie müssen ein privilegiertes Konto für den Befehl kinit verwenden, und der Hostcomputer sollte bereits Teil der Domäne sein. Das Konto benötigt Berechtigungen zum Herstellen einer Verbindung mit der Domäne und zum Erstellen von Konten und SPNs in der Domäne.

    In diesem Beispielskript wurde bereits ein privilegierter Benutzer namens privilegeduser@CONTOSO.COM auf dem Domänencontroller erstellt.

    kinit privilegeduser@CONTOSO.COM
    
  2. Erstellen Sie mit adutil den neuen Benutzer, der bei SQL Server das privilegierte Active Directory-Konto ist.

    Kennwörter können auf drei verschiedene Arten angegeben werden. Wenn Sie mehr als eine dieser Methoden verwenden, ist die folgende Reihenfolge zu beachten:

    • Verwenden des Kennwortflags: --password <password>
    • In einer Umgebungsvariable: ADUTIL_ACCOUNT_PWD
    • Interaktive Eingabe an einer Eingabeaufforderung

    Die Umgebungsvariablen oder interaktiven Eingabemethode sind sicherer als das Kennwortflag.

    adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password 'P@ssw0rd'
    

    Sie können den Namen des Kontos wie zuvor gezeigt mithilfe des Distinguished Name (--distname) angeben, oder Sie können den Namen der Organisationseinheit (OE) verwenden. Falls Sie beide angeben, hat der Name der Organisationseinheit (--ou) Vorrang vor dem Distinguished Name. Sie können den folgenden Befehl ausführen, um weitere Informationen zu erhalten:

    adutil user create --help
    
  3. Registrieren Sie SPNs für den zuvor erstellten Prinzipal. Sie müssen den vollqualifizierten Domänennamen (Fully Qualified Domain Name, FQDN) des Computers verwenden. In diesem Tutorial verwenden Sie den SQL Server-Standardport 1433. Ihre Portnummer kann anders lauten.

    adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 1433
    
    • addauto erstellt die SPNs automatisch, solange ausreichende Berechtigungen für das kinit-Konto vorhanden sind.
    • -n: Der Name des Kontos zum Zuweisen der SPNs.
    • -s: Dies ist der Dienstname, der zum Erstellen von SPNs verwendet werden soll. In diesem Fall gilt dieser für den SQL Server-Dienst, weshalb der Dienstname MSSQLSvc lautet.
    • -H: Dies ist der Hostname, der zum Erstellen von SPNs verwendet werden soll. Wenn kein Name angegeben ist, wird der FQDN des lokalen Hosts verwendet. In diesem Fall ist sql1 der Hostname, und der FQDN lautet sql1.contoso.com.
    • -p: Dies ist der Port, der zum Erstellen von SPNs verwendet werden soll. Wenn nicht angegeben, werden SPNs ohne einen Port generiert. SQL-Verbindungen funktionieren in diesem Fall nur, wenn die SQL Server-Instanz am Standardport 1433 lauscht.

Erstellen der Schlüsseltabellendatei für den SQL Server-Dienst mit mssql-conf

Sie können adutil installieren und in mssql-conf integrieren, um die Schlüsseltabelle direkt mit mssql-conf zu erstellen und zu konfigurieren. Diese Methode wird zum Erstellen einer Schlüsseltabellendatei für den SQL Server-Dienst bevorzugt. Andernfalls können Sie die Schlüsseltabellendatei für den SQL Server-Dienst manuell erstellen.

Voraussetzungen

  1. Stellen Sie sicher, dass sich die /var/opt/mssql/mssql.conf-Datei im Besitz von mssql und nicht rootbefindet. Wenn dies nicht der Fall ist, müssen Sie die mssql-conf-Befehle mit sudo ausführen.

  2. Aktivieren Sie auf einem Domänencontroller in den Active Directory-Einstellungen für das Konto network.privilegedadaccount (in diesen Beispielen: sqluser@CONTOSO.COM) die folgenden Optionen auf der Registerkarte Konto im Abschnitt Kontooptionen:

    • Dieses Konto unterstützt Kerberos-AES-128-Bit-Verschlüsselung
    • Dieses Konto unterstützt Kerberos-AES-256-Bit-Verschlüsselung

Erstellen der Schlüsseltabellendatei

Nachdem Sie den Benutzer und die SPNs erstellt haben, können Sie die Schlüsseltabelle anhand der folgenden Schritte erstellen.

  1. Wechseln Sie zum Benutzer mssql:

    su mssql
    
  2. Melden Sie sich mit dem kinit-Befehl als Active Directory-Benutzer an:

    kinit privilegeduser@CONTOSO.COM
    
  3. Erstellen Sie die Schlüsseltabellendatei:

    /opt/mssql/bin/mssql-conf setup-ad-keytab /var/opt/mssql/secrets/mssql.keytab sqluser
    

    Wenn Sie aufgefordert werden, den SQL Server-Dienst neu zu starten, um die neue Active Directory-Konfiguration zu übernehmen, können Sie dies im nächsten Abschnitt tun.

  4. Vergewissern Sie sich, dass die Schlüsseltabelle mit den richtigen Einträgen erstellt wurde:

    klist -kte /var/opt/mssql/secrets/mssql.keytab
    

    Die Ausgabe sollte folgendem Beispiel entsprechen:

    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)
    

    Wenn sich die Datei /var/opt/mssql/mssql.conf nicht im Besitz von mssql befindet, müssen Sie mssql-conf konfigurieren, um die Werte für network.kerberoskeytabfile und network.privilegedadaccount gemäß den vorherigen Schritten festzulegen. Geben Sie das Kennwort ein, wenn Sie dazu aufgefordert werden.

    /opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    /opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser
    
  5. Überprüfen Sie Ihre Konfiguration, um sicherzustellen, dass die Active Directory-Authentifizierung ohne Probleme funktioniert.

    /opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytab
    

    Die Ausgabe sollte etwa folgendem Beispiel entsprechen:

    Detected Configuration:
    Default Realm: CONTOSO.COM
    Keytab: /var/opt/mssql/secrets/mssql.keytab
    Reverse DNS Result: sql1.contoso.com
    SQL Server Port: 1433
    Detected SPNs (SPN, KVNO):
    (MSSQLSvc/sql1.CONTOSO.COM:1433, 4)
    (MSSQLSvc/sql1.CONTOSO.COM, 4)
    (MSSQLSvc/sql1:1433, 4)
    (MSSQLSvc/sql1, 4)
    Privileged Account (Name, KVNO):
    (sqluser, 4)
    

Manuelles Erstellen der Schlüsseltabellendatei für den SQL Server-Dienst

Wenn Sie adutil installiert und in mssql-conf integriert haben, können Sie mit Erstellen der Schlüsseltabellendatei für den SQL Server-Dienst mit mssql-conf fortfahren.

  1. Erstellen Sie die Schlüsseltabellendatei, die Einträge für jeden der vier zuvor erstellten SPNs und einen Eintrag für den Benutzer enthält.

    adutil keytab createauto -k /var/opt/mssql/secrets/mssql.keytab -p 1433 -H sql1.contoso.com --password 'P@ssw0rd' -s MSSQLSvc
    

    Die folgenden Befehlszeilenoptionen sind möglich:

    • -k: Der Pfad, unter dem die mssql.keytab-Datei erstellt wird. Im vorangehenden Beispiel sollte das Verzeichnis /var/opt/mssql/secrets/ bereits auf dem Host vorhanden sein.
    • -p: Dies ist der Port, der zum Erstellen von SPNs verwendet werden soll. Wenn nicht angegeben, werden SPNs ohne einen Port generiert.
    • -H: Dies ist der Hostname, der zum Erstellen von SPNs verwendet werden soll. Wenn kein Name angegeben ist, wird der FQDN des lokalen Hosts verwendet. In diesem Fall ist sql1 der Hostname, und der FQDN lautet sql1.contoso.com.
    • -s: Dies ist der Dienstname, der zum Erstellen von SPNs verwendet werden soll. In diesem Beispiel ist der SQL Server-Dienstname MSSQLSvc.
    • --password: Das Kennwort des privilegierten Active Directory-Benutzerkontos, das zuvor erstellt wurde.
    • -e oder --enctype: Dies sind Verschlüsselungstypen für den Schlüsseltabelleneintrag. Verwenden Sie eine durch Trennzeichen getrennte Liste von Werten. Wenn nicht angegeben, wird eine interaktive Eingabeaufforderung angezeigt.

    Sie können mehrere Verschlüsselungstypen auswählen, solange Ihr Host und Ihre Domäne den Verschlüsselungstyp unterstützen. In diesem Beispiel können Sie aes256-cts-hmac-sha1-96 und aes128-cts-hmac-sha1-96 auswählen. Sie sollten jedoch den Typ arcfour-hmac in einer Produktionsumgebung vermeiden, da dessen Verschlüsselung schwach ist.

    Wenn Sie den Verschlüsselungstyp ohne Aufforderung auswählen möchten, können Sie mit dem Argument -e im vorherigen Befehl den gewünschten Verschlüsselungstyp angeben. Führen Sie den folgenden Befehl aus, um weitere Hilfe zu den adutil keytab-Optionen zu erhalten:

    adutil keytab createauto --help
    
  2. Fügen Sie in der Schlüsseltabelle für den Prinzipalnamen und das Kennwort, die SQL Server zum Herstellen einer Verbindung mit Active Directory verwendet, einen Eintrag hinzu:

    adutil keytab create -k /var/opt/mssql/secrets/mssql.keytab -p sqluser --password 'P@ssw0rd'
    
    • -k: Pfad, in dem Sie die mssql.keytab-Datei erstellten möchten.
    • -p: Dies ist der Prinzipal, der der Schlüsseltabelle hinzugefügt wird.

    Die Tabelle adutil keytab [ create | autocreate ] überschreibt keine vorherigen Dateien; sie fügt nur an die bereits vorhandene Datei an.

  3. Stellen Sie sicher, dass die erstellte Schlüsseltabelle dem mssql-Benutzer gehört und nur der mssql-Benutzer Lese- und Schreibzugriff auf die Datei hat. Sie können die Befehle chown und chmod wie folgt ausführen:

    chown mssql /var/opt/mssql/secrets/mssql.keytab
    chmod 440 /var/opt/mssql/secrets/mssql.keytab
    

Konfigurieren von SQL Server für die Verwendung der Schlüsseltabelle

Führen Sie die folgenden Befehle aus, um SQL Server für die Verwendung der im vorherigen Schritt erstellten Schlüsseltabelle zu konfigurieren und das privilegierte Active Directory-Konto als den zuvor erstellten Benutzer festzulegen. In diesem Beispiel ist sqluser der Benutzername.

/opt/mssql/bin/mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
/opt/mssql/bin/mssql-conf set network.privilegedadaccount sqluser

Neu starten von SQL Server

Führen Sie für die Aktivierung und das Neustarten der SQL Server-Dienste den folgenden Befehl aus:

sudo systemctl restart mssql-server

Erstellen von Active Directory-basierten SQL Server-Anmeldungen in Transact-SQL

Stellen Sie eine Verbindung mit der SQL Server-Instanz her, und führen Sie die folgenden Befehle aus, um die Anmeldung zu erstellen und daraufhin zu bestätigen, dass sie vorhanden ist.

CREATE LOGIN [contoso\privilegeduser] FROM WINDOWS;
SELECT name FROM sys.server_principals;

Herstellen einer Verbindung mit SQL Server mithilfe der Active Directory-Authentifizierung

Melden Sie sich mit Ihren Windows-Anmeldeinformationen bei der SQL Server-Instanz an, um mithilfe von SSMS oder Azure Data Studio eine Verbindung herzustellen.

Sie können auch ein Tool wie sqlcmd verwenden, um mithilfe der Windows-Authentifizierung eine Verbindung mit der SQL Server-Instanz herzustellen.

sqlcmd -E -S 'sql1.contoso.com'