Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Van toepassing op:SQL Server op Linux
Dit artikel helpt u bij het oplossen van problemen met Active Directory Domain Services-verificatie met SQL Server in Linux en containers. Het bevat vereistencontroles en tips voor een geslaagde Active Directory-configuratie, en een lijst met veelvoorkomende fouten en stappen voor probleemoplossing.
Huidige configuratie valideren
Voordat je begint met het oplossen van problemen, valideer je de huidige gebruiker, mssql.confde Service Principal Name (SPN) en de realm-instellingen.
Verkrijg of vernieuw de Kerberos TGT (ticket-granting ticket) met
kinit:kinit privilegeduser@CONTOSO.COMVoer het volgende commando uit en zorg ervoor dat de gebruiker die het uitvoert toegang heeft tot de
mssql.keytab:/opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytabVoor meer informatie over het
validate-ad-configcommando, run/opt/mssql/bin/mssql-conf validate-ad-config --help.
DNS en omgekeerde DNS-zoekopdrachten
DNS-zoekopdrachten op de domeinnaam en NetBIOS-naam moeten hetzelfde IP-adres retourneren, wat normaal gesproken overeenkomt met het IP-adres voor de domeincontroller (DC). Voer deze opdrachten uit vanaf de SQL Server-hostcomputer.
nslookup contoso nslookup contoso.comAls de IP-adressen niet overeenkomen, raadpleegt u SQL Server op een Linux-host toevoegen aan een Active Directory-domein om DNS-zoekopdrachten en -communicatie met de domeincontroller op te lossen.
Voer een reverse DNS (rDNS) lookup uit voor elk IP-adres uit de vorige resultaten. Voeg IPv4- en IPv6-adressen toe waar van toepassing.
nslookup <IPs returned from the above commands>Iedereen moet
<hostname>.contoso.comretourneren. Controleer anders de PTR (pointer) records in Active Directory.Mogelijk moet u samenwerken met uw domeinbeheerder om rDNS te laten werken. Als je geen PTR-vermeldingen kunt toevoegen voor alle teruggestuurde IP-adressen, kun je SQL Server ook beperken tot een subset van domeincontrollers. Deze wijziging is van invloed op andere services die gebruikmaken van
krb5.confop de host.
Keytab-bestand en -machtigingen controleren
Controleer of je het keytab (sleuteltabel) bestand hebt gemaakt en dat je het juiste bestand met de juiste rechten hebt gebruikt
mssql-conf. De keytab moet toegankelijk zijn voor hetmssqlgebruikersaccount. Zie Adutil gebruiken voor het configureren van Active Directory-verificatie met SQL Server op Linuxvoor meer informatie.Zorg ervoor dat u de inhoud van de keytab kunt weergeven en dat u de juiste SPN's, poort, versleutelingstype en gebruikersaccount hebt toegevoegd. Als je de wachtwoorden niet correct invoert bij het aanmaken van de SPN's en keytab-invoeren, krijg je fouten wanneer je probeert in te loggen met Active Directory-authenticatie.
klist -kte /var/opt/mssql/secrets/mssql.keytabEen voorbeeld van een werkende keytab volgt. In het voorbeeld worden twee versleutelingstypen gebruikt, maar u kunt slechts een of meer typen gebruiken, afhankelijk van de versleutelingstypen die in uw omgeving worden ondersteund. In het voorbeeld
sqluser@CONTOSO.COMis het bevoegde account (dat overeenkomt met denetwork.privilegedadaccountinstelling inmssql-conf) en de hostnaam voor SQL Serversqllinux.contoso.comluistert op de standaardpoort1433.$ 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)
Realmgegevens valideren in krb5.conf
Controleer in
krb5.conf(op/etc/krb5.conf) of u waarden opgeeft voor de standaarddomein-, realm-informatie en domein-naar-realmtoewijzing. Bekijk het volgende voorbeeldbestandkrb5.conf. Zie Inzicht in Active Directory-verificatie voor SQL Server op Linux en containersvoor meer informatie.[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.COMU kunt SQL Server beperken om contact op te maken met een subset van domeincontrollers. Dit is handig als uw DNS-configuratie meer domeincontrollers retourneert dan SQL Server nodig heeft om contact op te maken. SQL Server on Linux laat je een lijst van domeincontrollers specificeren die SQL Server in een round-robin vorm contacteert bij het uitvoeren van een Lightweight Directory Access Protocol (LDAP) lookup.
Voltooi deze twee stappen. Verander
krb5.confeerst de domeincontrollers die je nodig hebt, met het voorvoegsel .kdc =[realms] CONTOSO.COM = { kdc = kdc1.contoso.com kdc = kdc2.contoso.com .. .. }Het
krb5.confbestand is een veelgebruikt configuratiebestand van de Kerberos-client, dus elke wijziging die je in dit bestand aanbrengt, beïnvloedt ook andere diensten naast SQL Server. Raadpleeg voordat je wijzigingen aanbrengt, je domeinbeheerder.Schakel de
network.enablekdcfromkrb5confinstelling in metmssql-conf, en start vervolgens SQL Server opnieuw op:sudo /opt/mssql/bin/mssql-conf set network.enablekdcfromkrb5conf true sudo systemctl restart mssql-server
Problemen met Kerberos oplossen
De volgende details helpen u bij het oplossen van Active Directory-authenticatieproblemen en het identificeren van specifieke foutmeldingen.
Kerberos traceren
Nadat je de gebruiker, SPN's en keytabs hebt gemaakt en geconfigureerdmssql-conf, verifieer je de Active Directory-configuratie.
Om de configuratie voor SQL Server on Linux te verifiëren, gebruik je het geprivilegieerde account om de Kerberos TGT te verkrijgen of te vernieuwen. Voer dit commando uit om de Kerberos-traceberichten in de console te tonen (stdout):
root@sqllinux mssql# KRB5_TRACE=/dev/stdout kinit -kt /var/opt/mssql/secrets/mssql.keytab sqluser
Als er geen problemen zijn, ziet u uitvoer die lijkt op het volgende voorbeeld. Zo niet, dan geeft de trace context over welke stappen te herzien moeten zijn.
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
Kerberos- en op beveiliging gebaseerde PAL-logboekregistratie inschakelen
Om specifieke foutmeldingen in de PAL (Platform Abstraction Layer) te identificeren, schakel het in en security.ldap logg in.security.kerberos Maak een logger.ini bestand aan met de volgende inhoud bij /var/opt/mssql/, en herstart vervolgens SQL Server om eventuele initialisatiefouten te registreren. Reproduceer de mislukking. De PAL registreert Active Directory-fouten en debugberichten naar /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 registreert loggerwijzigingen zonder logger.ini herstart, maar storingen tijdens de initialisatie van de Active Directory-service bij het opstarten van SQL Server blijven anders onopgemerkt. Het herstarten van SQL Server vangt alle foutmeldingen op.
Het beveiligingslogboek blijft naar het station schrijven totdat u de wijzigingen in logger.iniverwijdert. Schakel security.kerberos uit en security.ldap log zodra je het probleem hebt geïdentificeerd en opgelost, om te voorkomen dat je geen ruimte meer hebt op de schijf.
De PAL-logger genereert logbestanden in de volgende indeling:
<DATETIME> <Log level> [<logger>] <<process/thread identifier>> <message>
Een voorbeeldregel uit het logboek volgt bijvoorbeeld:
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
Zodra je PAL-logging hebt ingeschakeld en het probleem reproduceert, zoek dan naar het eerste bericht met log-niveau van Error. Gebruik de volgende tabel om de fout te vinden en volg de richtlijnen en aanbevelingen om het probleem op te lossen en te troubleshooten.
Veelvoorkomende foutberichten
Foutbericht: 'Aanmelden is mislukt. De login komt van een niet-vertrouwd domein en kan niet worden gebruikt met geïntegreerde authenticatie."
Mogelijke oorzaak
Je krijgt deze fout wanneer je probeert in te loggen met een Active Directory-account nadat je Active Directory-authenticatie hebt geconfigureerd.
Begeleiding
Voor dit algemene foutbericht moet u PAL-logboekregistratie inschakelen om de specifieke fout te identificeren.
Bekijk de volgende lijst met veelvoorkomende fouten om de mogelijke oorzaak van elke fout te identificeren, en volg vervolgens de probleemoplossingsrichtlijnen om het probleem op te lossen.
Foutbericht: Windows NT-gebruiker of -groep 'CONTOSO\user' is niet gevonden
Mogelijke oorzaak
Deze fout kan optreden bij het maken van de Windows-aanmelding of tijdens het vernieuwen van groep.
Begeleiding
Om het probleem te valideren, volg de instructies voor "Login mislukt. De aanmelding is afkomstig van een niet-vertrouwd domein en kan niet worden gebruikt met geïntegreerde verificatie. (Microsoft SQL Server, fout: 18452)" en schakel PAL-logging in om de specifieke fout te identificeren en het probleem dienovereenkomstig op te lossen.
Foutbericht: 'Kan korte domeinnaam niet opzoeken vanwege een fout'
Mogelijke oorzaak
De Transact-SQL syntaxis voor het maken van een Active Directory-aanmelding is:
CREATE LOGIN [CONTOSO\user]
FROM WINDOWS;
De NetBIOS-naam (CONTOSO) is vereist in het commando, maar de FQDN van het domein (contoso.com) moet in de backend worden opgegeven bij het uitvoeren van een LDAP-verbinding. Om deze conversie uit te voeren, wordt een DNS-zoekopdracht uitgevoerd op CONTOSO om te worden omgezet in het IP-adres van een domeincontroller, die vervolgens kan worden gebonden aan voor LDAP-query's.
Begeleiding
De foutmelding "Kon korte domeinnaam niet opzoeken vanwege fout" suggereert dat nslookup for contoso niet wordt opgelost naar het IP-adres van de domeincontroller. Bekijk DNS en reverse DNS-zoekopdrachten om te bevestigen dat zowel nslookup de NetBIOS- als de domeinnaam overeenkomen.
Foutberichten: 'Kan geen rDNS-zoekopdracht uitvoeren voor host-<hostnaam> vanwege een fout' of 'FQDN niet geretourneerd door rDNS-zoekactie'
Mogelijke oorzaak
Deze foutmeldingen geven meestal aan dat de reverse DNS-records (PTR-records) niet voor alle domeincontrollers bestaan.
Begeleiding
Controleer de DNS en omgekeerde DNS-zoekacties. Nadat je de domeincontrollers hebt geïdentificeerd die geen rDNS-vermeldingen hebben, heb je twee opties:
rDNS-vermeldingen toevoegen voor alle domeincontrollers
Deze instelling is geen SQL Server-instelling, en je moet deze op domeinniveau configureren. Je zult misschien samen moeten werken met je domeinbeheerteam om de vereiste PTR-records voor alle domeincontrollers te maken die
nslookupvoor de domeinnaam terugkomen.SQL Server beperken tot een subset van domeincontrollers
Als je geen PTR-records kunt toevoegen voor alle teruggegeven domeincontrollers, kun je SQL Server beperken tot een subset van domeincontrollers.
Foutbericht: 'Kan geen verbinding maken met LDAP-server ldap://CONTOSO.COM:3268: Lokale fout'
Mogelijke oorzaak
Deze algemene fout van OpenLDAP betekent normaal gesproken een van de volgende twee dingen:
- Geen referenties
- rDNS-problemen
Hier volgt een voorbeeld van het foutbericht:
12/09/2021 14:32:11.319933684 Error [security.ldap] <0000000142/0x000001c0> Failed to bind to LDAP server ldap://[CONTOSO.COM:3268]: Local error
Begeleiding
Geen referenties
Andere foutmeldingen verschijnen eerst als inloggegevens niet worden geladen voor LDAP-verbindingen. Schakel PAL-logging in en controleer het foutlogboek op foutmeldingen vóór deze. Als er geen andere fouten zijn, is dit waarschijnlijk geen probleem met referenties. Als je een fout vindt, los die dan op voordat je verder gaat. In de meeste gevallen is het een van de foutmeldingen die dit artikel behandelt.
rDNS-problemen
Controleer de DNS en omgekeerde DNS-zoekacties.
Wanneer de OpenLDAP-bibliotheek verbinding maakt met een domeincontroller, levert deze ofwel de volledig gekwalificeerde domeinnaam (FQDN), die in dit voorbeeld is
contoso.com, of de FQDN van de DC (kdc1.contoso.com). Na het tot stand brengen van de verbinding (maar voordat succes aan de aanroeper is teruggegeven), controleert de OpenLDAP-bibliotheek het IP-adres van de server waarmee het verbinding maakte. Vervolgens voert het een reverse DNS-zoekopdracht uit en controleert of de naam van de server waarmee het is verbonden (kdc1.contoso.com) overeenkomt met het gevraagde domein (contoso.com). Als deze niet overeenkomt, mislukt de verbinding met de OpenLDAP-bibliotheek als beveiligingsfunctie. Deze mismatch is een van de redenen waarom de rDNS-instellingen belangrijk zijn voor SQL Server on Linux en het onderwerp van dit artikel zijn.
Foutmelding: 'sleuteltabelvermelding niet gevonden'
Mogelijke oorzaak
Deze fout wijst op toegangsproblemen met het keytabbestand of ontbrekende vermeldingen in de keytab.
Begeleiding
Zorg ervoor dat het keytab-bestand het juiste toegangsniveau en de juiste machtigingen heeft. De standaardlocatie en naam van het keytab-bestand is /var/opt/mssql/secrets/mssql.keytab. Om de huidige permissies van alle bestanden onder de secrets-map te bekijken, voer je dit commando uit:
sudo ls -lrt /var/opt/mssql/secrets
Gebruik deze commando's om de rechten en toegangsniveau in het keytab-bestand in te stellen:
sudo chown mssql /var/opt/mssql/secrets/mssql.keytab
sudo chmod 440 /var/opt/mssql/secrets/mssql.keytab
Raadpleeg de vorige sectie Keytab-bestand en machtigingen controleren voor meer informatie over het weergeven van de keytab-vermeldingen en het instellen van de juiste machtigingen. Als je niet aan een van de voorwaarden in die sectie voldoet, zie je deze fout of een gelijkwaardige fout: "Key table entry not found".
Foutbericht: 'Er is geen sleuteltabelvermelding gevonden voor <principal>'
Mogelijke oorzaak
Wanneer je probeert de inloggegevens van <principal> het keytab op te halen, vind je geen relevante vermeldingen.
Begeleiding
Als u alle vermeldingen in de keytab wilt weergeven, volgt u de sectie Keytab-bestand en -machtigingen controleren van dit artikel. Zorg ervoor dat <principal> aanwezig is. In dit geval is het meestal de hoofdrekening waarop network.privilegedadaccount je de SPN's registreert. Als dat niet zo is, voeg het dan toe met het adutil commando. Zie Adutil gebruiken voor het configureren van Active Directory-verificatie met SQL Server op Linuxvoor meer informatie.
Foutbericht: "Aanvraag ticketserver <principal> niet gevonden in keytab (ticket kvno <KVNO>)"
Mogelijke oorzaak
Deze fout geeft aan dat SQL Server geen keytab-invoer kan vinden voor het gevraagde ticket met het opgegeven Key Version Number (KVNO).
Begeleiding
Als u alle vermeldingen in de keytab wilt weergeven, volgt u de sectie Keytab-bestand en -machtigingen controleren van dit artikel. Als je geen foutmelding kunt vinden die overeenkomt met en <principal> KVNO, werk dan het keytab-bestand bij om deze vermelding toe te voegen, volgens de stappen in dat gedeelte.
U kunt tevens het volgende commando uitvoeren om de meest recente KVNO van de DC op te halen. Voordat je dit commando uitvoert, verkrijg of vernieuw je de Kerberos TGT met het kinit commando. Zie Adutil gebruiken om een Active Directory-gebruiker voor SQL Server te maken en de SPN-(Service Principal Name) in te stellen voor meer informatie.
kvno MSSQLSvc/<hostname>
Foutbericht: "Aanvraag ticketserver <principal> kvno <KVNO-> gevonden in keytab, maar niet met enctype <versleutelingstype>"
Mogelijke oorzaak
Deze fout betekent dat de keytab van SQL Server niet het encryptietype bevat dat de client vraagt.
Begeleiding
Om te valideren, volg je het gedeelte 'Controleer keytabbestand en permissies ' in dit artikel om alle vermeldingen in het keytab weer te geven. Als je geen foutmelding kunt vinden die overeenkomt met de principal, KVNO en het encryptietype, werk dan het keytab-bestand bij om deze vermelding toe te voegen, volgens de stappen in die sectie.
Foutbericht: "Aanvraag ticketserver <principal> kvno <KVNO> enctype <versleutelingstype> gevonden in keytab, maar kan ticket niet ontsleutelen"
Mogelijke oorzaak
Dit foutbericht geeft aan dat SQL Server geen inloggegevens uit het keytab-bestand kan gebruiken om het binnenkomende authenticatieverzoek te ontsleutelen. Een verkeerd wachtwoord veroorzaakt deze fout vaak.
Begeleiding
Maak de keytab opnieuw aan met het juiste wachtwoord. Als je gebruiktadutil, maak dan de keytab aan met het juiste wachtwoord en volg de stappen in de tutorial: gebruik adutil om Active Directory-authenticatie te configureren met SQL Server on Linux.
Algemene poorten
Deze tabel toont de veelvoorkomende poorten die SQL Server on Linux gebruikt om Active Directory-authenticatie te configureren en te beheren.
| Active Directory-Service | Port |
|---|---|
| DNS | 53 |
| LDAP | 389 |
| LDAPS | 636 |
| Kerberos | 88 |