Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro:SQL Server na Linuxu
Tento článek vám pomůže vyřešit problémy s ověřováním služby Active Directory Domain Services s SQL Serverem v Linuxu a kontejnerech. Zahrnuje kontroly předpokladů a tipy pro úspěšnou konfiguraci služby služba Active Directory a seznam běžných chyb a kroků pro řešení potíží.
Ověření aktuální konfigurace
Než začnete s řešením problémů, ověřte aktuálního uživatele, mssql.conf, název principal služby (SPN) a nastavení domény.
Získejte nebo obnovte Kerberos TGT (vstupenku udělující jízdenku) s následujícími pravidly
kinit:kinit privilegeduser@CONTOSO.COMSpusť následující příkaz a ujisti se, že uživatel, který jej spouště, má přístup k :
mssql.keytab/opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytabPro více informací o příkazu
validate-ad-configpoužijte/opt/mssql/bin/mssql-conf validate-ad-config --help.
DNS a reverzní vyhledávání DNS
Vyhledávání DNS v názvu domény a názvu Rozhraní NetBIOS by mělo vrátit stejnou IP adresu, která se obvykle shoduje s IP adresou řadiče domény (DC). Spusťte tyto příkazy z hostitelského počítače s SQL Serverem.
nslookup contoso nslookup contoso.comPokud se IP adresy neshodují, podívejte se na téma Připojení SQL Serveru na hostiteli s Linuxem k doméně služby služba Active Directory, aby bylo možné opravit vyhledávání DNS a komunikaci s řadičem domény.
Proveďte reverzní DNS (rDNS) vyhledávání pro každou IP adresu z předchozích výsledků. Zahrňte adresy IPv4 a IPv6, kde je to vhodné.
nslookup <IPs returned from the above commands>Všichni by se měli vrátit
<hostname>.contoso.com. Jinak zkontrolujte záznamy PTR (ukazatele) v služba Active Directory.Možná budete muset spolupracovat se správcem domény, abyste mohli rDNS fungovat. Pokud nemůžete přidat položky PTR pro všechny vrácené IP adresy, můžete také omezit SQL Server na podmnožinu doménových řadičů. Tato změna má vliv na všechny ostatní služby používající
krb5.confna hostiteli.Další informace o reverzním DNS najdete v tématu Co je reverzní DNS?
Kontrola souboru keytab a jeho oprávnění
Zkontrolujte, zda jste vytvořili soubor keytab (klíčová tabulka) a že jste nastavili
mssql-confpoužívat správný soubor s příslušnými oprávněními. Keytab musí být přístupný pro uživatelský účetmssql. Další informace najdete v tématu Použití nástroje adutil ke konfiguraci ověřování služby služba Active Directory s SQL Serverem v Linuxu.Ujistěte se, že můžete vypsat obsah keytabového souboru a že jste přidali správné SPN, port, typ šifrování a uživatelský účet. Pokud při vytváření SPN a položek kláves nezadáte hesla správně, při pokusu o přihlášení pomocí autentizace služba Active Directory narazíte na chyby.
klist -kte /var/opt/mssql/secrets/mssql.keytabNásleduje příklad funkční klávesové zkratky. Příklad používá dva typy šifrování, ale v závislosti na typech šifrování podporovaných ve vašem prostředí můžete použít jenom jeden nebo více typů šifrování. V tomto příkladu je
sqluser@CONTOSO.COMprivilegovaný účet (což odpovídá nastavenínetwork.privilegedadaccountvmssql-conf) a název hostitele serveru SQL Server jesqllinux.contoso.com, který naslouchá na výchozím portu1433.$ 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)
Ověření informací o doméně v krb5.conf
V
krb5.conf(umístěném v/etc/krb5.conf) zkontrolujte, jestli zadáte hodnoty pro výchozí sféru, informace o sférě a doménu na mapování sféry. Prohlédněte si následujícíkrb5.confukázkový soubor. Další informace najdete v tématu Principy ověřování active directory pro SQL Server v Linuxu a kontejnerech.[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.COMSql Server můžete omezit tak, aby kontaktoval podmnožinu řadičů domény, což je užitečné, pokud vaše konfigurace DNS vrací více řadičů domény, než SQL Server potřebuje kontaktovat. SQL Server on Linux vám umožní zadat seznam doménových řadičů, které SQL Server kontaktuje v kruhovém režimu při provádění vyhledávání pomocí Lightweight Directory Access Protocol (LDAP).
Splňte tyto dva kroky. Nejprve upravte přidáním
krb5.confpotřebných doménových řadičů, s předponoukdc =.[realms] CONTOSO.COM = { kdc = kdc1.contoso.com kdc = kdc2.contoso.com .. .. }Soubor
krb5.confje běžný konfigurační soubor klienta Kerberos, takže jakékoli změny, které v něm provedete, ovlivňují kromě SQL Server i jiné služby. Před jakýmikoli změnami se poraďte se svým správcem domény.Povolte
network.enablekdcfromkrb5confnastavení smssql-conf, a poté restartujte SQL Server:sudo /opt/mssql/bin/mssql-conf set network.enablekdcfromkrb5conf true sudo systemctl restart mssql-server
Řešení potíží s protokolem Kerberos
Následující podrobnosti vám pomohou řešit problémy s autentizací v služba Active Directory a identifikovat konkrétní chybové zprávy.
Trasování protokolu Kerberos
Po vytvoření uživatele, SPN a klávesových tabulek a nastavení mssql-conf, ověřte konfiguraci služba Active Directory.
Pro ověření konfigurace SQL Server on Linux použijte privilegovaný účet k získání nebo obnovení Kerberos TGT. Spusť tento příkaz pro zobrazení zpráv o stopě Kerberos v konzoli (stdout):
root@sqllinux mssql# KRB5_TRACE=/dev/stdout kinit -kt /var/opt/mssql/secrets/mssql.keytab sqluser
Pokud nedojde k žádným problémům, měl by se zobrazit výstup podobný následujícímu příkladu. Pokud ne, trasa poskytuje kontext o tom, které kroky si přečíst.
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
Povolení protokolování Kerberos a zabezpečení založeného na PAL
Pro identifikaci konkrétních chybových hlášení v PAL (Platform Abstraction Layer) povolte security.kerberos a security.ldap logování. Vytvořte logger.ini soubor s následujícím obsahem v bodě /var/opt/mssql/, a poté restartujte SQL Server, abyste zachytili případné chyby inicializace. Opakujte neúspěch. PAL zaznamenává chybové a ladicí zprávy služba Active Directory do /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 zachytí změny loggeru bez logger.ini restartu, ale selhání při inicializaci služby služba Active Directory při startu SQL Server zůstávají bez povšimnutí. Restartování SQL Server zachytí všechny chybové zprávy.
Protokol zabezpečení pokračuje v zapisování na disk, dokud neodeberete změny v logger.ini. Jakmile problém identifikujete a vyřešíte, deaktivujte a security.ldap logujtesecurity.kerberos, abyste zabránili nedostatku místa na disku.
Protokolovací nástroj PAL generuje soubory protokolu v následujícím formátu:
<DATETIME> <Log level> [<logger>] <<process/thread identifier>> <message>
Příklad ukázkového řádku z protokolu:
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
Jakmile povolíte PAL logování a reprodukujete problém, hledejte první zprávu s logovou úrovní Error. Použijte následující tabulku k nalezení chyby a postupujte podle pokynů a doporučení k řešení a řešení problému.
Běžné chybové zprávy
Chybová zpráva: Přihlášení se nezdařilo. Přihlášení je z nedůvěryhodné domény a nelze jej použít s integrovanou autentizací."
Možná příčina
Na tuto chybu narazíte, když se po nastavení autentizace v služba Active Directory pokusíte přihlásit s účtem služba Active Directory.
Guidance
Tato obecná chybová zpráva vyžaduje, abyste povolit protokolování PAL k identifikaci konkrétní chyby.
Podívejte se na následující seznam běžných chyb, abyste identifikovali možnou příčinu každé chyby, a poté postupujte podle pokynů k řešení problému.
Chybová zpráva: Uživatel nebo skupina SYSTÉMU Windows NT Contoso\user nebyla nalezena.
Možná příčina
K této chybě může dojít při pokusu o vytvoření přihlášení systému Windows nebo při aktualizaci skupiny .
Guidance
Pro ověření problému postupujte podle pokynů "Přihlášení selhalo. Přihlášení pochází z nedůvěryhodné domény a nelze ji použít s integrovaným ověřováním. (Microsoft SQL Server, chyba: 18452)" a povolit PAL logování pro identifikaci konkrétní chyby a odpovídající řešení problémů.
Chybová zpráva: "Nepodařilo se vyhledat krátký název domény kvůli chybě"
Možná příčina
Syntaxe Transact-SQL pro vytvoření přihlášení ke službě služba Active Directory:
CREATE LOGIN [CONTOSO\user]
FROM WINDOWS;
Název NetBIOS (CONTOSO) je vyžadován v příkazu, ale při LDAP spojení musí být v backendu uvedena FQDN domény (contoso.com) (). K tomuto převodu se provádí vyhledávání DNS na CONTOSO, aby se přeložila na IP adresu řadiče domény, ke které se potom lze připojit pro dotazy LDAP.
Guidance
Chybová zpráva "Nepodařilo se vyhledat krátké doménové jméno kvůli chybě" naznačuje, že nslookup pro contoso se nepřenese na IP adresu doménového řadiče. Projděte DNS a zpětné DNS dotazy , abyste si potvrdili, že nslookup NetBIOS i doména odpovídají.
Chybové zprávy: "Nelze provést vyhledávání rDNS pro hostitele <, název hostitele>, kvůli chybě" nebo "plně kvalifikovaný název domény nebyl vrácen vyhledáváním rDNS"
Možná příčina
Tyto chybové zprávy obvykle znamenají, že reverzní DNS záznamy (PTR záznamy) neexistují pro všechny doménové řadiče.
Guidance
Zkontrolujte DNS a reverzní DNS vyhledávání. Poté, co identifikujete doménové řadiče, které nemají rDNS záznamy, máte dvě možnosti:
Přidat položky rDNS pro všechny řadiče domény
Toto nastavení není nastavení SQL Server a musíte ho nastavit na úrovni domény. Možná budete muset spolupracovat se správcem domény, abyste vytvořili požadované PTR záznamy pro všechny doménové řadiče, které se vracejí
nslookuppro doménu.Omezení SQL Serveru na podmnožinu řadičů domény
Pokud nemůžete přidat PTR záznamy pro všechny vrácené doménové řadiče, můžete omezit SQL Server na podmnožinu doménových řadičů.
Chybová zpráva: Nepodařilo se vytvořit vazbu k serveru LDAP ldap://CONTOSO.COM:3268: Místní chyba
Možná příčina
Tato obecná chyba z OpenLDAP obvykle znamená jednu ze dvou věcí:
- Žádné přihlašovací údaje
- Problémy s rDNS
Tady je příklad chybové zprávy:
12/09/2021 14:32:11.319933684 Error [security.ldap] <0000000142/0x000001c0> Failed to bind to LDAP server ldap://[CONTOSO.COM:3268]: Local error
Guidance
Žádné přihlašovací údaje
Další chybové zprávy se objeví jako první, pokud se přihlašovací údaje pro LDAP připojení nenačtou. Zapněte PAL logování a zkontrolujte chybový log na chybové zprávy před tímto hlášením. Pokud nedojde k žádným jiným chybám, pravděpodobně se nejedná o problém s přihlašovacími údaji. Pokud najdete chybu, opravte ji, než půjdete dál. Ve většině případů je to jedna z chybových zpráv, které tento článek pokrývá.
problémy s rDNS
Zkontrolujte DNS a reverzní DNS vyhledávání.
Když se knihovna OpenLDAP připojí k doménovému řadiči, poskytuje buď plně kvalifikované doménové jméno (FQDN), které je v tomto příkladu ,
contoso.comnebo FQDNkdc1.contoso.com() domény DC. Po navázání spojení (ale před vrácením úspěchu volajícímu) knihovna OpenLDAP zkontroluje IP adresu serveru, ke kterému se připojila. Poté provede reverzní DNS vyhledávání a zkontroluje, zda název serveru, ke kterému se připojil (kdc1.contoso.com) odpovídá požadované doméně (contoso.com). Pokud se neshoduje, knihovna OpenLDAP selže při připojení jako prvek zabezpečení. Tento nesoulad je jedním z důvodů, proč jsou nastavení rDNS důležitá pro SQL Server on Linux a jsou středem tohoto článku.
Chybová zpráva: "Položka tabulky klíčů nebyla nalezena"
Možná příčina
Tato chyba naznačuje problémy s přístupem k souboru s klávesami nebo chybějící záznamy v tabulce kláves.
Guidance
Ujistěte se, že soubor keytab má správnou úroveň přístupu a oprávnění. Výchozí umístění a název souboru keytab je ./var/opt/mssql/secrets/mssql.keytab Pro zobrazení aktuálních oprávnění všech souborů ve složce secrets spusťte tento příkaz:
sudo ls -lrt /var/opt/mssql/secrets
Použijte tyto příkazy k nastavení oprávnění a úrovně přístupu k souboru s klávesami:
sudo chown mssql /var/opt/mssql/secrets/mssql.keytab
sudo chmod 440 /var/opt/mssql/secrets/mssql.keytab
Další informace o výpisu položek keytab a nastavení správných oprávnění najdete v předchozí části Kontrola souboru a oprávnění keytab. Pokud nesplňujete žádnou z podmínek v této části, uvidíte tuto chybu nebo ekvivalentní chybu: "Key table entry not found".
Chybová zpráva: Žádná položka nebyla nalezena v tabulce klíčů pro <principál>
Možná příčina
Když se pokusíte získat přihlašovací údaje z <principal> keytabu, nenajdete žádné relevantní záznamy.
Guidance
Pokud chcete zobrazit seznam všech položek v keytab, postupujte podle pokynů v části Kontrola souboru a oprávnění keytab tohoto článku. Ujistěte se, že je <principal> k dispozici. V takovém případě je hlavní účet obvykle ten network.privilegedadaccount , na který registrujete SPN. Pokud ne, přidejte to příkazem adutil . Další informace najdete v tématu Použití nástroje adutil ke konfiguraci ověřování služby služba Active Directory s SQL Serverem v Linuxu.
Chybová zpráva: Server požadovaného lístku <nebyl nalezen v hlavním objektu> v keytabu (ticket kvno <KVNO>)
Možná příčina
Tato chyba znamená, že SQL Server nemůže najít položku v tabulce kláves pro požadovaný tiket s určeným číslem verze klíče (KVNO).
Guidance
Pokud chcete zobrazit seznam všech položek v keytab, postupujte podle pokynů v části Kontrola souboru a oprávnění keytab tohoto článku. Pokud nenajdete chybovou zprávu, která odpovídá KVNO <principal> a KVNO, aktualizujte soubor s keytabem a přidejte tento záznam, podle kroků v této sekci.
Nejnovější KVNO můžete získat také spuštěním následujícího příkazu z DC. Než tento příkaz spustíte, získejte nebo obnovte Kerberos TGT pomocí tohoto kinit příkazu. Další informace najdete v tématu Použití nástroje adutil k vytvoření uživatele služby služba Active Directory pro SQL Server a nastavení hlavního názvu služby (SPN).
kvno MSSQLSvc/<hostname>
Chybová zpráva: "Požadavek na ticket server <principál> KVNO <KVNO> nalezen v keytab, ale ne s typem šifrování <>"
Možná příčina
Tato chyba znamená, že klíčová karta SQL Server neobsahuje typ šifrování, který klient požaduje.
Guidance
Pro ověření postupujte podle sekce Zkontrolovat soubor a oprávnění v tomto článku, kde najdete všechny položky v záložce kláves. Pokud nenajdete chybovou zprávu, která odpovídá principu, KVNO a typu šifrování, aktualizujte soubor keytab a přidejte tento záznam, podle kroků v této sekci.
Chybová zpráva: "Žádost na server lístku <objekt zabezpečení> kvno <KVNO> šifrovací algoritmus <typ šifrování> nalezen v keytab, ale nelze dešifrovat lístek"
Možná příčina
Tato chybová zpráva naznačuje, že SQL Server nemůže použít přihlašovací údaje ze souboru keytab k dešifrování příchozího autentizačního požadavku. Chybu často způsobuje nesprávné heslo.
Guidance
Znovu vytvořte klíčovou kartu se správným heslem. Pokud použijete adutil, vytvořte keytab se správným heslem a postupujte podle kroků v tutoriálu: Použijte adutil k nastavení autentizace v služba Active Directory se SQL Server on Linux.
Běžné porty
Tato tabulka ukazuje běžné porty, které SQL Server on Linux používá ke konfiguraci a administraci autentizace služba Active Directory.
| Služba služba Active Directory | Port |
|---|---|
| DNS | 53 |
| protokol LDAP | 389 |
| protokol LDAPS | 636 |
| Kerberos | 88 |