Beheben von Problemen bei der Active Directory-Authentifizierung für SQL Server unter Linux und in Containern

Gilt für:SQL Server unter Linux

In diesem Artikel erfahren Sie, wie Sie Active Directory Domain Services-Authentifizierungsprobleme bei SQL Server unter Linux und in Containern beheben. Er enthält Voraussetzungsprüfungen und Tipps für eine erfolgreiche Active Directory-Konfiguration sowie eine Liste mit häufigen Fehlern und Problembehandlungsschritten.

Validieren der aktuellen Konfiguration

Bevor Sie mit der Fehlersuche beginnen, überprüfen Sie den aktuellen Benutzer, mssql.confden Service Principal Name (SPN) und die Realm-Einstellungen.

  1. Rufen Sie das Kerberos-Ticket-Granting-Ticket (TGT) mit kinit ab oder erneuern Sie es:

    kinit privilegeduser@CONTOSO.COM
    
  2. Führen Sie folgenden Befehl aus und stellen Sie sicher, dass der Benutzer Zugriff auf die mssql.keytabhat:

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

    Für weitere Informationen über den validate-ad-config Befehl führe /opt/mssql/bin/mssql-conf validate-ad-config --help.

DNS- und Reverse-DNS-Abfragen

  1. DNS-Lookups für den Domänennamen und den NetBIOS-Namen sollten dieselbe IP-Adresse zurückgeben, die normalerweise mit der IP-Adresse für den Domänencontroller (DC) identisch ist. Führen Sie die folgenden Befehle auf dem SQL Server-Hostcomputer aus:

    nslookup contoso
    nslookup contoso.com
    

    Wenn die IP-Adressen nicht übereinstimmen, finden Sie weitere Informationen unter Join SQL Server on a Linux host to an Active Directory domain (Hinzufügen von SQL Server auf einem Linux-Host zu einer Active Directory-Domäne), um DNS-Lookups und die Kommunikation mit dem Domänencontroller zu beheben.

  2. Führen Sie für jede IP-Adresse aus den vorherigen Ergebnissen eine Reverse DNS (rDNS)-Suche durch. Geben Sie IPv4- und IPv6-Adressen an, wo anwendbar.

    nslookup <IPs returned from the above commands>
    

    Alle sollten <hostname>.contoso.com zurückgeben. Ansonsten überprüfen Sie die PTR-(Zeiger-)Datensätze in Active Directory.

    Möglicherweise müssen Sie mit Ihrem Domänenadministrator zusammenarbeiten, damit rDNS funktioniert. Wenn du für alle zurückgegebenen IP-Adressen keine PTR-Einträge hinzufügen kannst, kannst du SQL Server auch auf eine Teilmenge von Domänencontrollern beschränken. Diese Änderung wirkt sich auf alle anderen Dienste aus, die krb5.conf auf dem Host verwenden.

    Weitere Informationen zu Reverse-DNS finden Sie unter Was ist Reverse-DNS?

Keytab-Datei und Berechtigungen überprüfen

  1. Überprüfe, ob du die Keytab-Datei (Schlüsseltabellendatei) erstellt hast und ob du mssql-conf so konfiguriert hast, dass die richtige Datei mit den entsprechenden Berechtigungen verwendet wird. Die Schlüsseltabelle muss für das Benutzerkonto mssql zugänglich sein. Weitere Informationen dazu finden Sie unter Verwenden von adutil zum Konfigurieren der Active Directory-Authentifizierung mit SQL Server für Linux.

  2. Stellen Sie sicher, dass Sie den Inhalt der Schlüsseltabelle auflisten können und die richtigen SPNs, Ports, Verschlüsselungstypen und Benutzerkonten hinzugefügt haben. Wenn Sie die Passwörter beim Erstellen der SPNs und Keytab-Einträge nicht korrekt eingeben, stoßen Sie auf Fehler, wenn Sie versuchen, sich mit Active Directory-Authentifizierung anzumelden.

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

    Im Folgenden finden Sie ein Beispiel für eine funktionsfähige Keytab-Datei. Im Beispiel werden zwei Verschlüsselungstypen verwendet, aber Sie können je nach den in Ihrer Umgebung unterstützten Verschlüsselungstypen nur einen oder mehrere verwenden. Im Beispiel ist sqluser@CONTOSO.COM das privilegierte Konto (das der Einstellung network.privilegedadaccount in mssql-conf entspricht). Der Keytab enthält SPNs für den kurzen Hostnamen am Standardport 1433 und den vollständig qualifizierten Domainnamen (FQDN) am benutzerdefinierten Port 5533. Jeder port-qualifizierte SPN muss mit dem Hostnamen und Port übereinstimmen, die die Clients zur Verbindung verwenden.

    $ kinit privilegeduser@CONTOSO.COM
    Password for privilegeduser@CONTOSO.COM:
    
    $ klist
    
    Ticket cache: FILE:/tmp/krb5cc_1000
    Default principal: privilegeduser@CONTOSO.COM
    Valid starting     Expires            Service principal
    01/26/22 20:42:02  01/27/22 06:42:02  krbtgt/CONTOSO.COM@CONTOSO.COM
        renew until 01/27/22 20:41:57
    
    $ klist -kte /var/opt/mssql/secrets/mssql.keytab
    
    Keytab name: FILE:/var/opt/mssql/secrets/mssql.keytab
    KVNO Timestamp         Principal
    ---- ----------------- --------------------------------------------------------
       2 01/13/22 13:19:47 MSSQLSvc/sqllinux@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       2 01/13/22 13:19:47 MSSQLSvc/sqllinux@CONTOSO.COM (aes128-cts-hmac-sha1-96)
       2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com@CONTOSO.COM (aes128-cts-hmac-sha1-96)
       2 01/13/22 13:19:47 MSSQLSvc/sqllinux:1433@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       2 01/13/22 13:19:47 MSSQLSvc/sqllinux:1433@CONTOSO.COM (aes128-cts-hmac-sha1-96)
       2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com:5533@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       2 01/13/22 13:19:47 MSSQLSvc/sqllinux.contoso.com:5533@CONTOSO.COM (aes128-cts-hmac-sha1-96)
       2 01/13/22 13:19:55 sqluser@CONTOSO.COM (aes256-cts-hmac-sha1-96)
       2 01/13/22 13:19:55 sqluser@CONTOSO.COM (aes128-cts-hmac-sha1-96)
    

Realm-Informationen in krb5.conf validieren

  1. Überprüfen Sie in krb5.conf (unter /etc/krb5.conf), ob Sie Werte für den Standardbereich, die Bereichsinformationen und die Domänen-zu-Bereich-Zuordnung angegeben haben. Überprüfen Sie die folgende Beispieldatei krb5.conf . Weitere Informationen dazu finden Sie unter Grundlegendes zur Active Directory-Authentifizierung für SQL Server für Linux und Container.

    [libdefaults]
    default_realm = CONTOSO.COM
    default_keytab_name = /var/opt/mssql/secrets/mssql.keytab
    default_ccache_name = ""
    
    [realms]
    CONTOSO.COM = {
        kdc = adVM.contoso.com
        admin_server = adVM.contoso.com
        default_domain = contoso.com
    }
    
    [domain_realm]
    .contoso.com = CONTOSO.COM
    contoso.com = CONTOSO.COM
    
  2. Sie können SQL Server so einschränken, dass nur eine Teilmenge der Domänencontroller kontaktiert wird. Dies ist nützlich, wenn Ihre DNS-Konfiguration mehr Domänencontroller zurückgibt, als von SQL Server kontaktiert werden müssen. SQL Server für Linux ermöglicht es, eine Liste von Domänencontrollern anzugeben, die SQL Server bei einer Lightweight Directory Access Protocol (LDAP)-Abfrage im Round-Robin-Verfahren kontaktiert.

    Erledigen Sie diese beiden Schritte. Ändern Sie zunächst krb5.conf, indem Sie die benötigten Domänencontroller hinzufügen, denen kdc = vorangestellt ist.

    [realms]
    CONTOSO.COM = {
      kdc = kdc1.contoso.com
      kdc = kdc2.contoso.com
      ..
      ..
    }
    

    Die krb5.conf Datei ist eine gängige Kerberos-Client-Konfigurationsdatei, daher beeinflussen alle Änderungen in dieser Datei neben dem SQL Server auch andere Dienste. Bevor Sie Änderungen vornehmen, konsultieren Sie Ihren Domain-Administrator.

    Aktivieren Sie die Einstellung network.enablekdcfromkrb5conf mit mssql-confund starten Sie dann den SQL Server neu:

    sudo /opt/mssql/bin/mssql-conf set network.enablekdcfromkrb5conf true
    sudo systemctl restart mssql-server
    

Beheben von Kerberos-Problemen

Die folgenden Details helfen Ihnen, Active Directory-Authentifizierungsprobleme zu beheben und spezifische Fehlermeldungen zu identifizieren.

Kerberos nachverfolgen

Nachdem Sie Benutzer, SPNs und Keytabs erstellt und mssql-confkonfiguriert haben, überprüfen Sie die Active Directory-Konfiguration.

Um die Konfiguration für SQL Server für Linux zu überprüfen, verwenden Sie das privilegierte Konto, um das Kerberos TGT abzurufen oder zu erneuern. Führe diesen Befehl aus, um die Kerberos-Trace-Nachrichten in der Konsole anzuzeigen (stdout):

root@sqllinux mssql# KRB5_TRACE=/dev/stdout kinit -kt /var/opt/mssql/secrets/mssql.keytab sqluser

Wenn keine Probleme auftreten, sollte eine Ausgabe ähnlich dem folgenden Beispiel angezeigt werden. Falls nicht, liefert die Spur Kontext darüber, welche Schritte überprüft werden sollten.

3791545 1640722276.100275: Getting initial credentials for sqluser@CONTOSO.COM
3791545 1640722276.100276: Looked up etypes in keytab: aes256-cts, aes128-cts
3791545 1640722276.100278: Sending unauthenticated request
3791545 1640722276.100279: Sending request (202 bytes) to CONTOSO.COM
3791545 1640722276.100280: Initiating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100281: Sending TCP request to stream 10.0.0.4:88
3791545 1640722276.100282: Received answer (185 bytes) from stream 10.0.0.4:88
3791545 1640722276.100283: Terminating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100284: Response was from master KDC
3791545 1640722276.100285: Received error from KDC: -1765328359/Additional pre-authentication required
3791545 1640722276.100288: Preauthenticating using KDC method data
3791545 1640722276.100289: Processing preauth types: PA-PK-AS-REQ (16), PA-PK-AS-REP_OLD (15), PA-ETYPE-INFO2 (19), PA-ENC-TIMESTAMP (2)
3791545 1640722276.100290: Selected etype info: etype aes256-cts, salt "CONTOSO.COMsqluser", params ""
3791545 1640722276.100291: Retrieving sqluser@CONTOSO.COM from /var/opt/mssql/secrets/mssql.keytab (vno 0, enctype aes256-cts) with result: 0/Success
3791545 1640722276.100292: AS key obtained for encrypted timestamp: aes256-cts/E84B
3791545 1640722276.100294: Encrypted timestamp (for 1640722276.700930): plain 301AA011180F32303231313XXXXXXXXXXXXXXXXXXXXXXXXXXXXX, encrypted 333109B95898D1B4FC1837DAE3E4CBD33AF8XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3791545 1640722276.100295: Preauth module encrypted_timestamp (2) (real) returned: 0/Success
3791545 1640722276.100296: Produced preauth for next request: PA-ENC-TIMESTAMP (2)
3791545 1640722276.100297: Sending request (282 bytes) to CONTOSO.COM
3791545 1640722276.100298: Initiating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100299: Sending TCP request to stream 10.0.0.4:88
3791545 1640722276.100300: Received answer (1604 bytes) from stream 10.0.0.4:88
3791545 1640722276.100301: Terminating TCP connection to stream 10.0.0.4:88
3791545 1640722276.100302: Response was from master KDC
3791545 1640722276.100303: Processing preauth types: PA-ETYPE-INFO2 (19)
3791545 1640722276.100304: Selected etype info: etype aes256-cts, salt "CONTOSO.COMsqluser", params ""
3791545 1640722276.100305: Produced preauth for next request: (empty)
3791545 1640722276.100306: AS key determined by preauth: aes256-cts/E84B
3791545 1640722276.100307: Decrypted AS reply; session key is: aes256-cts/05C0
3791545 1640722276.100308: FAST negotiation: unavailable
3791545 1640722276.100309: Initializing KCM:0:37337 with default princ sqluser@CONTOSO.COM
3791545 1640722276.100310: Storing sqluser@CONTOSO.COM -> krbtgt/CONTOSO.COM@CONTOSO.COM in KCM:0:37337
3791545 1640722276.100311: Storing config in KCM:0:37337 for krbtgt/CONTOSO.COM@CONTOSO.COM: pa_type: 2
3791545 1640722276.100312: Storing sqluser@CONTOSO.COM -> krb5_ccache_conf_data/pa_type/krbtgt/CONTOSO.COM@CONTOSO.COM@X-CACHECONF: in KCM:0:37337

$ sudo klist
Ticket cache: KCM:0:37337
Default principal: sqluser@CONTOSO.COM
Valid starting Expires Service principal
12/28/2021 20:11:16 12/29/2021 06:11:16 krbtgt/CONTOSO.COM@CONTOSO.COM
renew until 01/04/2022 20:11:16

Aktivieren Sie die Kerberos- und sicherheitsbasierte PAL-Protokollierung

Um spezifische Fehlermeldungen im PAL (Platform Abstraction Layer) zu identifizieren, aktivieren Sie die Protokollierung für security.kerberos und security.ldap. Erstellen Sie eine logger.ini Datei mit folgendem Inhalt bei /var/opt/mssql/, und starten Sie dann den SQL Server neu, um eventuelle Initialisierungsfehler zu erkennen. Reproduzieren Sie den Fehler. PAL protokolliert Fehler- und Debugmeldungen von Active Directory in /var/opt/mssql/log/security.log.

[Output:security]
Type = File
Filename = /var/opt/mssql/log/security.log
[Logger]
Level = Silent
[Logger:security.kerberos]
Level = Debug
Outputs = security
[Logger:security.ldap]
Level = Debug
Outputs = security

SQL Server übernimmt Logger-Änderungen aus logger.ini ohne Neustart, aber Fehler während der Initialisierung des Active Directory-Dienstes beim Start von SQL Server bleiben ansonsten unbemerkt. Ein Neustart von SQL Server erfasst alle Fehlermeldungen.

Das Sicherheitsprotokoll schreibt weiterhin auf das Laufwerk, bis Sie die Änderungen in logger.ini entfernen. Deaktiviere security.kerberos und security.ldap logge, sobald du das Problem identifiziert und behoben hast, um zu verhindern, dass der Speicherplatz auf der Festplatte ausgeht.

Die PAL-Protokollierung generiert Protokolldateien im folgenden Format:

<DATETIME> <Log level> [<logger>] <<process/thread identifier>> <message>

Nachfolgend sehen Sie etwa eine Beispielzeile aus dem Protokoll:

12/28/2021 13:56:31.609453055 Error [security.kerberos] <0003753757/0x00000324> Request ticket server MSSQLSvc/sql.contoso.com:1433@CONTOSO.COM kvno 3 enctype aes256-cts found in keytab but cannot decrypt ticket

Sobald du PAL-Logging aktiviert und das Problem reproduziert hast, suche nach der ersten Nachricht mit einem Log-Level von Error. Verwenden Sie die folgende Tabelle, um den Fehler zu identifizieren, und befolgen Sie die Anweisungen und Empfehlungen, um das Problem zu diagnostizieren und zu beheben.

Häufig auftretende Fehlermeldungen

Fehlermeldung: „Fehler bei der Anmeldung. Der Login stammt von einer nicht vertrauenswürdigen Domain und kann nicht mit integrierter Authentifizierung verwendet werden."

Mögliche Ursache

Sie stoßen auf diesen Fehler, wenn Sie versuchen, sich nach der Konfiguration der Active Directory-Authentifizierung mit einem Active Directory-Konto anzumelden.

Leitlinien

Diese generische Fehlermeldung erfordert, dass Sie die PAL-Protokollierung aktivieren, um den spezifischen Fehler zu identifizieren.

Sehen Sie sich die folgende Liste häufiger Fehler an, um die mögliche Ursache jedes Fehlers zu identifizieren, und folgen Sie dann den Fehlerbehebungshinweisen, um das Problem zu beheben.

Fehlermeldungen
Der Windows NT-Benutzer oder die Gruppe ‚CONTOSO\user‘ wurde nicht gefunden
Der kurze Domänenname konnte aufgrund eines Fehlers nicht nachgeschlagen werden
Für den Host <hostname> konnte aufgrund eines Fehlers keine rDNS-Suche ausgeführt werden
Die rDNS-Suche hat keinen FQDN zurückgegeben
Fehler beim Binden an den LDAP-Server
Ein Eintrag in der Schlüsseltabelle wurde nicht gefunden
Für <principal> wurde kein Eintrag in der Schlüsseltabelle gefunden
Der Anforderungsticketserver <Prinzipal> wurde in der Schlüsseltabelle nicht gefunden (Schlüsselversionsnummer des Tickets <KVNO>)
Der Anforderungsticketserver <Prinzipal> mit Schlüsselversionsnummer <KVNO> wurde in der Schlüsseltabelle gefunden, jedoch nicht mit dem Verschlüsselungstyp <Verschlüsselungstyp>
Der Anforderungsticketserver <Prinzipal> mit Schlüsselversionsnummer <KVNO> mit dem Verschlüsselungstyp <Verschlüsselungstyp> wurde in der Schlüsseltabelle gefunden, aber das Ticket kann nicht entschlüsselt werden

Fehlermeldung: Der Windows NT-Benutzer oder die Gruppe ‚CONTOSO\user‘ wurde nicht gefunden

Mögliche Ursache

Dieser Fehler kann auftreten, wenn Sie versuchen, die Windows-Anmeldung zu erstellen, oder während der Gruppenaktualisierung.

Leitlinien

Um das Problem zu überprüfen, befolgen Sie die Anweisungen zu "Anmeldung fehlgeschlagen. Die Anmeldung stammt aus einer nicht vertrauenswürdigen Domäne und kann nicht mit der integrierten Authentifizierung verwendet werden. (Microsoft SQL Server, Fehler: 18452)" und PAL-Logging aktivieren, um den spezifischen Fehler zu identifizieren und entsprechend zu beheben.

Fehlermeldung: „Der kurze Domänenname konnte aufgrund eines Fehlers nicht nachgeschlagen werden“

Mögliche Ursache

Die Transact-SQL-Syntax zum Erstellen einer Active Directory-Anmeldung lautet:

CREATE LOGIN [CONTOSO\user]
    FROM WINDOWS;

Der NetBIOS-Name (CONTOSO) ist im Befehl erforderlich, aber der FQDN der Domäne (contoso.com) muss im Backend angegeben werden, wenn eine LDAP-Verbindung durchgeführt wird. Für diese Konvertierung wird eine DNS-Abfrage für CONTOSO durchgeführt, um die IP-Adresse eines Domänencontrollers zu ermitteln, mit dem dann für LDAP-Abfragen eine Bindung hergestellt werden kann.

Leitlinien

Die Fehlermeldung „Der Kurzname der Domäne konnte aufgrund eines Fehlers nicht ermittelt werden“ deutet darauf hin, dass nslookup für contoso nicht in die IP-Adresse des Domänencontrollers aufgelöst wird. Überprüfen Sie DNS- und Reverse-DNS-Lookups, um zu bestätigen, dass nslookup sowohl für den NetBIOS-Namen als auch für den Domänennamen übereinstimmt.

Fehlermeldungen: „Aufgrund eines Fehlers konnte kein rDNS-Lookup für den Host <Hostname> durchgeführt werden“ oder „Vom rDNS-Lookup wurde kein FQDN zurückgegeben“

Mögliche Ursache

Diese Fehlermeldungen deuten in der Regel darauf hin, dass die Reverse-DNS-Datensätze (PTR-Datensätze) nicht für alle Domänencontroller existieren.

Leitlinien

Überprüfen Sie die DNS- und Reverse-DNS-Suchen. Nachdem du die Domänencontroller identifiziert hast, die keine rDNS-Einträge haben, hast du zwei Möglichkeiten:

  • Hinzufügen von rDNS-Einträgen für alle Domänencontroller

    Diese Einstellung ist keine SQL Server-Einstellung, und Sie müssen sie auf Domänenebene konfigurieren. Möglicherweise musst du mit deinem Team für die Domänenverwaltung zusammenarbeiten, um die erforderlichen PTR-Datensätze für alle Domänencontroller zu erstellen, die nslookup für den Domänennamen zurückgibt.

  • Beschränken von SQL Server auf eine Teilmenge von Domänencontrollern

    Wenn du für alle zurückgegebenen Domänencontroller keine PTR-Einträge hinzufügen kannst, kannst du den SQL Server auf eine Teilmenge von Domänencontrollern beschränken.

Fehlermeldung: „Fehler beim Binden an den LDAP-Server ldap://CONTOSO.COM:3268: Lokaler Fehler“

Mögliche Ursache

Dieser generische Fehler von OpenLDAP bedeutet normalerweise eines von zwei Dingen:

  • Keine Anmeldeinformationen
  • rDNS-Probleme

Hier sehen Sie ein Beispiel für die Fehlermeldung:

12/09/2021 14:32:11.319933684 Error [security.ldap] <0000000142/0x000001c0> Failed to bind to LDAP server ldap://[CONTOSO.COM:3268]: Local error

Leitlinien

  • Keine Anmeldeinformationen

    Weitere Fehlermeldungen erscheinen zuerst, wenn die Zugangsdaten für LDAP-Verbindungen nicht geladen werden. Aktiviere PAL-Logging und überprüfe das Sicherheitsprotokoll auf Fehlermeldungen vor diesem Fall. Wenn keine weiteren Fehler vorhanden sind, handelt es sich wahrscheinlich nicht um ein Problem mit Anmeldeinformationen. Wenn du einen Fehler findest, korrigiere ihn, bevor du weitermachst. In den meisten Fällen ist es eine der Fehlermeldungen, die dieser Artikel behandelt.

  • rDNS-Probleme

    Überprüfen Sie die DNS- und Reverse-DNS-Suchen.

    Wenn die OpenLDAP-Bibliothek eine Verbindung zu einem Domänencontroller herstellt, übermittelt sie entweder den vollqualifizierten Domänennamen (FQDN), der in diesem Beispiel contoso.com ist, oder den FQDN des Domänencontrollers (kdc1.contoso.com). Nachdem die Verbindung hergestellt wurde (aber bevor der Erfolg an den Anrufer zurückgegeben wurde), überprüft die OpenLDAP-Bibliothek die IP des Servers, mit dem sie verbunden war. Anschließend führt es eine umgekehrte DNS-Abfrage durch und prüft, ob der Name des Servers, mitkdc1.contoso.com dem es verbunden war, mit der angeforderten Domain übereinstimmt (contoso.com). Wenn er nicht übereinstimmt, verwirft die OpenLDAP-Bibliothek als Sicherheitsfeature die Verbindung. Diese Diskrepanz ist ein Teil des Grundes, warum die rDNS-Einstellungen für SQL Server für Linux wichtig sind und im Mittelpunkt dieses Artikels stehen.

Fehlermeldung: „Eintrag in der Schlüsseltabelle nicht gefunden“

Mögliche Ursache

Dieser Fehler weist auf Zugriffsprobleme mit der Keytab-Datei oder fehlende Einträge im Keytab hin.

Leitlinien

Vergewissern Sie sich, dass die Schlüsseltabellendatei die richtige Zugriffsebene und die richtigen Berechtigungen aufweist. Der Standardstandort und Name der Keytab-Datei ist /var/opt/mssql/secrets/mssql.keytab. Um die aktuellen Berechtigungen aller Dateien unter dem Ordner Secrets anzuzeigen, führen Sie diesen Befehl aus:

sudo ls -lrt /var/opt/mssql/secrets

Verwenden Sie diese Befehle, um die Berechtigungen und die Zugriffsstufe der Keytab-Datei festzulegen:

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

Weitere Informationen zum Auflisten der Schlüsseltabelleneinträge und zum Festlegen der korrekten Berechtigungen finden Sie im vorherigen Abschnitt Überprüfen der Schlüsseltabellendatei und der Berechtigungen. Wenn Sie keine der Bedingungen in diesem Abschnitt erfüllen, sehen Sie diesen Fehler oder einen entsprechenden Fehler: "Key table entry not found".

Fehlermeldung: „In der Schlüsseltabelle wurde kein Eintrag für <principal> gefunden“

Mögliche Ursache

Wenn du versuchst, die Zugangsdaten vom <principal> Keytab abzurufen, findest du keine relevanten Einträge.

Leitlinien

Wenn Sie alle Einträge in der Schlüsseltabelle auflisten möchten, folgen Sie dem Abschnitt Überprüfen der Schlüsseltabellendatei und der Berechtigungen in diesem Artikel. Stellen Sie sicher, dass <principal> vorhanden ist. In diesem Fall ist das Hauptkonto in der Regel das network.privilegedadaccount, für das Sie die SPNs registrieren. Wenn nicht, füge es mit dem adutil Befehl hinzu. Weitere Informationen dazu finden Sie unter Verwenden von adutil zum Konfigurieren der Active Directory-Authentifizierung mit SQL Server für Linux.

Fehlermeldung: „Der Anforderungsticketserver <Prinzipal> wurde in der Schlüsseltabelle nicht gefunden (Schlüsselversionsnummer des Tickets <KVNO>)“

Mögliche Ursache

Dieser Fehler zeigt an, dass SQL Server keinen Keytab-Eintrag für das angeforderte Ticket mit der angegebenen Key Version Number (KVNO) finden kann.

Leitlinien

Wenn Sie alle Einträge in der Schlüsseltabelle auflisten möchten, folgen Sie dem Abschnitt Überprüfen der Schlüsseltabellendatei und der Berechtigungen in diesem Artikel. Wenn du keine Fehlermeldung findest, die mit <principal> und KVNO übereinstimmt, aktualisiere die Keytab-Datei, um diesen Eintrag hinzuzufügen, und befolge dabei die Schritte in diesem Abschnitt.

Sie können auch den folgenden Befehl ausführen, um die neueste KVNO vom DC abzurufen. Bevor du diesen Befehl ausführst, erhalte oder erneuere das Kerberos-TGT mit diesem kinit Befehl. Weitere Informationen dazu erfahren Sie unter Verwenden von adutil zum Erstellen eines Active Directory-Benutzers für SQL Server und Festlegen des Dienstprinzipalnamens (Service Principal Name, SPN).

kvno MSSQLSvc/<hostname>

Fehlermeldung: „Der Anforderungsticketserver <Prinzipal> mit Schlüsselversionsnummer <KVNO> wurde in der Schlüsseltabelle gefunden, jedoch nicht mit dem Verschlüsselungstyp <Verschlüsselungstyp>“

Mögliche Ursache

Dieser Fehler bedeutet, dass das Keytab von SQL Server nicht den vom Client angeforderten Verschlüsselungstyp enthält.

Leitlinien

Zur Validierung folgen Sie dem Abschnitt "Keytab"-Datei und Berechtigungen prüfen , um alle Einträge im Keytab aufzulisten. Wenn Sie keine Fehlermeldung finden, die mit dem Principal, KVNO und Verschlüsselungstyp übereinstimmt, aktualisieren Sie die Keytab-Datei, um diesen Eintrag hinzuzufügen, und folgen Sie den Schritten in diesem Abschnitt.

Fehlermeldung: „Der Anforderungsticketserver <Prinzipal> mit Schlüsselversionsnummer <KVNO> mit dem Verschlüsselungstyp <Verschlüsselungstyp> wurde in der Schlüsseltabelle gefunden, aber das Ticket kann nicht entschlüsselt werden“

Mögliche Ursache

Diese Fehlermeldung zeigt an, dass SQL Server keine Zugangsdaten aus der Keytab-Datei verwenden kann, um die eingehende Authentifizierungsanfrage zu entschlüsseln. Ein falsches Passwort verursacht diesen Fehler oft.

Leitlinien

Erstelle den Keytab mit dem richtigen Passwort neu. Wenn Sie adutilverwenden, erstellen Sie den Keytab mit dem richtigen Passwort und folgen Sie den Schritten im Tutorial: Verwenden Sie adutil, um die Active Directory-Authentifizierung mit SQL Server für Linux zu konfigurieren.

Gängige Ports

Diese Tabelle zeigt die gängigen Ports, die SQL Server für Linux zur Konfiguration und Verwaltung der Active Directory-Authentifizierung verwendet.

Active Directory-Dienst Hafen
DNS 53
LDAP 389
LDAPS 636
Kerberos 88