Symptom: Fehler beim Anmelden im AD-Modus: nicht vertrauenswürdige Domäne (Big Data-Cluster)
Wichtig
Das Microsoft SQL Server 2019-Big Data-Cluster-Add-On wird eingestellt. Der Support für SQL Server 2019-Big Data-Clusters endet am 28. Februar 2025. Alle vorhandenen Benutzer*innen von SQL Server 2019 mit Software Assurance werden auf der Plattform vollständig unterstützt, und die Software wird bis zu diesem Zeitpunkt weiterhin über kumulative SQL Server-Updates verwaltet. Weitere Informationen finden Sie im Ankündigungsblogbeitrag und unter Big Data-Optionen auf der Microsoft SQL Server-Plattform.
Bei einem SQL Server-Big Data-Cluster im Active Directory-Modus tritt bei Verbindungsversuchen möglicherweise der folgende Fehler auf:
Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication.
Dies kann passieren, wenn Sie DNS-Einträge als CNAME-Einträge konfiguriert haben, die auf einen Aliasnamen eines Reverseproxys verweisen, der den Datenverkehr auf Kubernetes-Knoten verteilt.
Grundursache
Folgendes passiert, wenn die Endpunkte mit CNAME-Einträgen als DNS-Einträge konfiguriert sind, die auf einen Aliasnamen eines Reverseproxys verweisen, der den Datenverkehr auf Kubernetes-Knoten verteilt:
- Der Kerberos-Authentifizierungsprozess sucht nach einem Dienstprinzipalnamen (Service Principal Name, SPN), der mit dem CNAME-Eintrag übereinstimmt, und nicht nach dem richtigen SPN, der vom BDC in Active Directory registriert wurde.
- Bei der Authentifizierung tritt ein Fehler auf.
Überprüfen der Grundursache
Wenn bei der Authentifizierung ein Fehler aufgetreten ist, überprüfen Sie den Kerberos-Ticketcache.
Verwenden Sie den Befehl klist
, um den Ticketcache zu überprüfen.
Suchen Sie nach einem Ticket mit einem SPN, der dem des Endpunkts entspricht, mit dem Sie eine Verbindung herstellen wollten.
Das gesuchte Ticket ist nicht vorhanden.
Im folgenden Beispiel handelt es sich bei dem DNS-Eintrag für den Masterendpunkt bdc-sql
um einen CNAME-Eintrag mit dem Reverseproxy ServerReverseProxy
.
Resolve-DnsName bdc-sql
Der folgende Abschnitt zeigt die Ergebnisse für den obigen Befehl.
Name Type TTL Section NameHost
---- ---- --- ------- --------
bdc-sql.mydomain.com CNAME 3600 Answer ReverseProxyServer.mydomain.com
Name : ReverseProxyServer.mydomain.com
QueryType : A
TTL : 3600
Section : Answer
IP4Address : 193.168.5.10
Hinweis
Der folgende Abschnitt bezieht sich auf tshark
. Bei tshark
handelt es sich um ein Befehlszeilen-Hilfsprogramm, das als Teil des Hilfsprogramms Wireshark für Netzwerkablaufverfolgung installiert ist.
Verwenden Sie tshark
, um den von Active Directory angeforderten SPN anzuzeigen. Mit dem folgenden Befehl wird bei der Netzwerkablaufverfolgung nur die Kerberos-Protokollkommunikation erfasst, und nur Meldungen mit krb-error (30)
werden angezeigt. Diese Meldungen sollten SPN-Anforderungsnachrichten enthalten, bei denen ein Fehler aufgetreten ist.
tshark -Y "kerberos && kerberos.msg_type == 30" -T fields -e kerberos.error_code -e kerberos.SNameString
Versuchen Sie, über eine andere Befehlsshell eine Verbindung mit dem Masterpod herzustellen:
klist purge
sqlcmd -S bdc-sql.mydomain.com,31433 -E
Sehen Sie sich die folgende Beispielausgabe an.
klist purge
Current LogonId is 0:0xf6b58
Deleting all tickets:
Ticket(s) purged!
sqlcmd -S bdc-sql.mydomain.com,31433 -E
sqlcmd: Error: Microsoft ODBC Driver 17 for SQL Server : Login failed. The login is from an untrusted domain and cannot be used with Integrated authentication.
Überprüfen Sie die tshark
-Ausgabe.
Capturing on 'Ethernet 3'
25 krbtgt,RLAZURE.COM
7 MSSQLSvc,ReverseProxyServer.mydomain.com:31433
2 packets captured
Beachten Sie, dass der Client SPN MSSQLSvc,ReverseProxyServer.mydomain.com:31433
anfordert, welche nicht vorhanden ist. Der Verbindungsversuch schlägt schließlich mit dem Fehler 7 fehl. Fehler 7 bedeutet KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN Server not found in Kerberos database
(KRB5KDC_ERR_S_PRINCIPAL_UNKNOWN: Der Server wurde in der Kerberos-Datenbank nicht gefunden.).
Bei richtiger Konfiguration fordert der Client den vom BDC registrierten SPN an. Bei diesem Beispiel wäre der richtige SPN MSSQLSvc,bdc-sql.mydomain.com:31433
.
Hinweis
Fehler 25 bedeutet KDC_ERR_PREAUTH_REQUIRED
. Eine zusätzliche Vorauthentifizierung ist erforderlich. Diesen Fehler können Sie ruhig ignorieren. KDC_ERR_PREAUTH_REQUIRED
wird bei der anfänglichen Kerberos-AD-Anforderung zurückgegeben. Der Windows-Kerberos-Client erfasst in dieser ersten Anforderung standardmäßig keine Vorauthentifizierungsinformationen.
Führen Sie setspn -L mssql-master
aus, um die Liste der vom BDC für den Masterendpunkt registrierten SPNs anzuzeigen.
Sehen Sie sich die folgende Beispielausgabe an:
Registered ServicePrincipalNames for CN=mssql-master,OU=bdc,DC=mydomain,DC=com:
MSSQLSvc/bdc-sqlread.mydomain.com:31436
MSSQLSvc/-sqlread:31436
MSSQLSvc/bdc-sqlread.mydomain.com
MSSQLSvc/bdc-sqlread
MSSQLSvc/bdc-sql.mydomain.com:31433
MSSQLSvc/bdc-sql:31433
MSSQLSvc/bdc-sql.mydomain.com
MSSQLSvc/bdc-sql
MSSQLSvc/master-p-svc.mydomain.com:1533
MSSQLSvc/master-p-svc:1533
MSSQLSvc/master-p-svc.mydomain.com:1433
MSSQLSvc/master-p-svc:1433
MSSQLSvc/master-p-svc.mydomain.com
MSSQLSvc/master-p-svc
MSSQLSvc/master-svc.mydomain.com:1533
MSSQLSvc/master-svc:1533
MSSQLSvc/master-svc.mydomain.com:1433
MSSQLSvc/master-svc:1433
MSSQLSvc/master-svc.mydomain.com
MSSQLSvc/master-svc
In den obigen Ergebnissen sollte die Reverseproxyadresse nicht registriert sein.
Beheben
In diesem Abschnitt werden zwei Möglichkeiten gezeigt, dieses Problem zu beheben. Führen Sie in Ihrem Client ipconfig -flushdns
und klist purge
aus, nachdem Sie die entsprechenden Änderungen vorgenommen haben. Versuchen Sie dann noch mal, eine Verbindung herzustellen.
Option 1:
Entfernen Sie im DNS alle CNAME-Einträge für BDC-Endpunkte, und ersetzen Sie sie durch mehrere A
-Einträge, die auf jeden Kubernetes-Knoten oder jeden Kubernetes-Master verweisen, wenn Sie über mehr als einen Master verfügen.
Tipp
Das nachstehende Skript verwendet PowerShell. Weitere Informationen finden Sie unter Installieren von PowerShell unter Linux.
Sie können die DNS-Einträge der Endpunkte mithilfe des folgenden PowerShell-Skripts aktualisieren. Führen Sie das Skript auf allen Computern aus, die mit derselben Domäne verbunden sind:
#Specify the DNS server, example contoso.local
$Domain_DNS_name=mydomain.com'
#DNS records for bdc endpoints
$Controller_DNS_name = 'bdc-control'
$Managment_proxy_DNS_name= 'bdc-proxy'
$Master_Primary_DNS_name = 'bdc-sql'
$Master_Secondary_DNS_name = 'bdc-sqlread'
$Gateway_DNS_name = 'bdc-gateway'
$AppProxy_DNS_name = 'bdc-appproxy'
#Performing Endpoint DNS records Checks..
#Build array of endpoints
$BdcEndpointsDns = New-Object System.Collections.ArrayList
[void]$BdcEndpointsDns.Add($Controller_DNS_name)
[void]$BdcEndpointsDns.Add($Managment_proxy_DNS_name)
[void]$BdcEndpointsDns.Add($Master_Primary_DNS_name)
[void]$BdcEndpointsDns.Add($Master_Secondary_DNS_name)
[void]$BdcEndpointsDns.Add($Gateway_DNS_name)
[void]$BdcEndpointsDns.Add($AppProxy_DNS_name)
#Build arrary for results
$BdcEndpointsDns_Result = New-Object System.Collections.ArrayList
foreach ($DnsName in $BdcEndpointsDns) {
try {
$endpoint_DNS_record = Resolve-DnsName $DnsName -Type A -Server $Domain_DNS_IP_address -ErrorAction Stop
foreach ($ip in $endpoint_DNS_record.IPAddress) {
[void]$BdcEndpointsDns_Result.Add("OK - $DnsName is an A record with an IP $ip")
}
}
catch {
[void]$BdcEndpointsDns_Result.Add("MisConfiguration - $DnsName is not an A record or does not exists")
}
}
#show the results
$BdcEndpointsDns_Result
Option 2:
Alternativ können Sie das Problem umgehen, indem Sie den CNAME-Eintrag so ändern, dass er auf die IP-Adresse des Reverseproxys statt auf dessen Namen verweist.
Überprüfen der Behebung
Wenn Sie eine der oben dargestellten Problemlösungsstrategien angewendet haben, überprüfen Sie, ob der Fehler behoben wurde, indem Sie eine Verbindung mit dem Big Data-Cluster über Active Directory herstellen.
Nächste Schritte
Überprüfen der Reverse-DNS-Einträge (PTR-Eintrag) für den Domänencontroller