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.
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)
Erwerben oder erneuern Sie das Kerberos-TGT (Ticket-Granting Ticket) mithilfe des
kinit
-Befehls. Sie müssen ein privilegiertes Konto für den Befehlkinit
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
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
- Verwenden des Kennwortflags:
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 daskinit
-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 DienstnameMSSQLSvc
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 istsql1
der Hostname, und der FQDN lautetsql1.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
Stellen Sie sicher, dass sich die
/var/opt/mssql/mssql.conf
-Datei im Besitz vonmssql
und nichtroot
befindet. Wenn dies nicht der Fall ist, müssen Sie die mssql-conf-Befehle mitsudo
ausführen.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.
Wechseln Sie zum Benutzer
mssql
:su mssql
Melden Sie sich mit dem
kinit
-Befehl als Active Directory-Benutzer an:kinit privilegeduser@CONTOSO.COM
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.
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 vonmssql
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
Ü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.
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 diemssql.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 istsql1
der Hostname, und der FQDN lautetsql1.contoso.com
.-s
: Dies ist der Dienstname, der zum Erstellen von SPNs verwendet werden soll. In diesem Beispiel ist der SQL Server-DienstnameMSSQLSvc
.--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
undaes128-cts-hmac-sha1-96
auswählen. Sie sollten jedoch den Typarcfour-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 denadutil keytab
-Optionen zu erhalten:adutil keytab createauto --help
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 diemssql.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.Stellen Sie sicher, dass die erstellte Schlüsseltabelle dem
mssql
-Benutzer gehört und nur dermssql
-Benutzer Lese- und Schreibzugriff auf die Datei hat. Sie können die Befehlechown
undchmod
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'
Zugehöriger Inhalt
- 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
- Active Directory-Authentifizierung für SQL Server für Linux
- Tutorial: Konfigurieren der Active Directory-Authentifizierung mit SQL Server für Linux-Container
- Rotieren von Schlüsseltabellen für SQL Server unter Linux