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 – Linux
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 Active Directory a seznam běžných chyb a kroků pro řešení potíží.
Ověření aktuální konfigurace
Než začnete řešit potíže, musíte ověřit aktuálního uživatele, mssql.conf, hlavní název služby (SPN) a nastavení sféry.
Získání nebo obnovení Kerberos TGT (lístku pro vydání dalších lístků) pomocí
kinit:kinit privilegeduser@CONTOSO.COMSpusťte následující příkaz a ujistěte se, že uživatel, pod kterým tento příkaz spouštíte, má přístup k
mssql.keytab:/opt/mssql/bin/mssql-conf validate-ad-config /var/opt/mssql/secrets/mssql.keytabDalší informace o příkazu
validate-ad-confignajdete v nápovědě pomocí příkazu/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 Active Directory, aby bylo možné opravit vyhledávání DNS a komunikaci s řadičem domény.
Proveďte reverzní vyhledávání DNS (rDNS) pro každou IP adresu uvedenou v předchozích výsledcích. Nezapomeňte tam, kde je to možné, zahrnout adresy IPv4 a IPv6.
nslookup <IPs returned from the above commands>Všichni by se měli vrátit
<hostname>.contoso.com. Pokud tomu tak není, zkontrolujte záznamy PTR (ukazatel), které jsou vytvořené ve službě 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 řadičů domény. 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, že jste vytvořili soubor keytab (tabulka klíčů) a že mssql-conf je nakonfigurovaný tak, aby používal správný soubor s příslušnými oprávněními. Keytab musí být přístupný pro uživatelský účet
mssql. Další informace najdete v tématu Použití nástroje adutil ke konfiguraci ověřování služby 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í hlavních názvů služby (SPN) a položek keytab nezadáte správně hesla, při pokusu o přihlášení pomocí ověřování služby Active Directory se objeví 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 (který odpovídá nastavenínetwork.privilegedadaccountv mssql-conf) a název hostitele pro SQL Server jesqllinux.contoso.comnaslouchá 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 mssql.keytab Keytab name: FILE: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. Následující příklad je ukázkový souborkrb5.conf. 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 v Linuxu umožňuje určit seznam řadičů domény, které SQL Server kontaktuje pomocí kruhového dotazování při vyhledávání protokolu LDAP (Lightweight Directory Access Protocol).
Je potřeba provést dva kroky. Nejprve upravte
krb5.confpřidáním libovolného počtu řadičů domény, které potřebujete, a přidejte předponukdc =.[realms] CONTOSO.COM = { kdc = kdc1.contoso.com kdc = kdc2.contoso.com .. .. }Mějte na paměti, že
krb5.confje běžný konfigurační soubor klienta Kerberos, takže všechny změny, které v tomto souboru provedete, ovlivní kromě SQL Serveru i jiné služby. Před provedením jakýchkoli změn se obraťte na správce domény.Pak můžete nastavení
network.enablekdcfromkrb5confpovolit pomocí mssql-conf a poté restartovat 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 pomůžou při řešení potíží s ověřováním služby Active Directory a identifikaci konkrétních chybových zpráv.
Trasování protokolu Kerberos
Jakmile vytvoříte uživatele, hlavní názvy služby (SPN) a keytabs a nakonfigurujete mssql-conf, abyste ověřili správnost konfigurace služby Active Directory pro SQL Server v Linuxu, můžete při pokusu o získání nebo obnovení Kerberos TGT pomocí privilegovaného účtu zobrazit na konzoli zprávy trasování Kerberos (stdout) pomocí tohoto příkazu:
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, záznam poskytuje kontext o krocích, které byste si měli projít.
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
Protokolování security.kerberos a security.ldap můžete povolit k identifikaci konkrétních chybových zpráv v PAL (vrstva abstrakce platformy). V /var/opt/mssql/vytvořte soubor logger.ini s následujícím obsahem, restartujte SQL Server a potom chybu reprodukujte. Chybové zprávy služby Active Directory a ladicí zprávy systému PAL se zapisují 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
Není nutné restartovat SQL Server, aby se změny protokolovacího nástroje převzaly z logger.ini, ale během inicializace služby Active Directory nebo při spouštění SQL Serveru může dojít k selháním, která by jinak zůstala bez povšimnutí. Restartování SQL Serveru zajistí, že se zachytí všechny chybové zprávy.
Protokol zabezpečení pokračuje v zapisování na disk, dokud neodeberete změny v logger.ini. Nezapomeňte zakázat security.kerberos a security.ldap protokolování, jakmile zjistíte a vyřešíte problém, abyste zabránili výpadku místa na jednotce.
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 máte povolené protokolování PAL a reprodukujete problém, vyhledejte první zprávu s úrovní protokolu Errora pak pomocí následující tabulky vyhledejte chybu a postupujte podle pokynů a doporučení k řešení problému.
Běžné chybové zprávy
Chybová zpráva: Přihlášení se nezdařilo. Přihlášení pochází z nedůvěryhodné domény a nelze ji použít s integrovaným ověřováním."
Možná příčina
K této chybě dochází při pokusu o přihlášení pomocí účtu služby Active Directory, jakmile nakonfigurujete ověřování služby Active Directory.
Vodítko
Tato obecná chybová zpráva vyžaduje, abyste povolit protokolování PAL k identifikaci konkrétní chyby.
Pokud chcete zjistit možnou příčinu jednotlivých chyb, projděte si následující seznam běžných chyb a při řešení tohoto problému postupujte podle pokynů k řešení potíží.
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 .
Vodítko
Pokud chcete problém ověřit, postupujte podle pokynů, jak je uvedeno v části Přihlášení se nezdařilo. 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)" povolit protokolování PAL pro identifikaci konkrétní chyby a odpovídající řešení potíží.
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ě Active Directory:
CREATE LOGIN [CONTOSO\user]
FROM WINDOWS;
V příkazu se vyžaduje název netBIOS (CONTOSO), ale v back-endu při provádění připojení LDAP musí být zadán plně kvalifikovaný název 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.
Vodítko
Chybová zpráva "Nepodařilo se vyhledat krátký název domény kvůli chybě" naznačuje, že nslookup pro contoso se nepřiřazuje na IP adresu řadiče domény. Měli byste zkontrolovat DNS a reverzní vyhledávání DNS a ověřit, že nslookup pro rozhraní NetBIOS i název domény by měly odpovídat.
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
Tato chybová zpráva obvykle značí, že pro všechny řadiče domény neexistují reverzní záznamy DNS (záznamy PTR).
Vodítko
Zkontrolujte DNS a reverzní DNS vyhledávání. Jakmile jsou identifikovány řadiče domény, které nemají položky rDNS, existují dvě možnosti:
Přidat položky rDNS pro všechny řadiče domény
Toto nastavení není nastavení SQL Serveru a musí být nakonfigurované na úrovni domény. Možná budete muset se svým týmem pro správu domény vytvořit požadované záznamy PTR pro všechny řadiče domény vrácené při spuštění
nslookupv názvu domény.Omezení SQL Serveru na podmnožinu řadičů domény
Pokud přidání záznamů PTR není možné pro všechny vrácené řadiče domény, můžete omezit SQL Server na podmnožinu řadičů domény.
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 jeden z takových 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
Vodítko
Žádné přihlašovací údaje
Pokud se přihlašovací údaje pro připojení LDAP nenačtou, zobrazí se jako první další chybové zprávy. Měli byste povolit protokolování PAL a zkontrolovat protokol chyb kvůli chybovým zprávám před touto. Pokud nedojde k žádným jiným chybám, pravděpodobně se nejedná o problém s přihlašovacími údaji. Pokud se najde, pokračujte opravou chybové zprávy, která se zobrazí. Ve většině případů se jedná o jednu z chybových zpráv popsaných v tomto článku.
problémy s rDNS
Zkontrolujte DNS a reverzní DNS vyhledávání.
Když se knihovna OpenLDAP připojí k řadiči domény, je poskytnut buď plně kvalifikovaný název domény (FQDN), což je v tomto příkladu
contoso.com, nebo FQDN řadiče domény (DC), což jekdc1.contoso.com. Jakmile je připojení navázáno (ale před tím, než knihovna OpenLDAP potvrdí úspěšné spojení volajícímu), knihovna OpenLDAP zkontroluje IP adresu serveru, ke kterému je připojena. Potom provede reverzní vyhledávání DNS a zkontroluje, jestli název serveru připojeného (kdc1.contoso.com) odpovídá doméně, pro kterou bylo připojení požadováno (contoso.com). Pokud se neshoduje, knihovna OpenLDAP selže při připojení jako prvek zabezpečení. To je část toho, proč jsou nastavení rDNS tak důležitá pro SQL Server v Linuxu a jsou zaměřená na tento článek.
Chybová zpráva: "Položka tabulky klíčů nebyla nalezena"
Možná příčina
Tato chyba označuje problémy s přístupem k souboru keytab nebo nemá všechny požadované položky v tabulce klíčů.
Vodítko
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. Pokud chcete zobrazit aktuální oprávnění pro všechny soubory ve složce tajných kódů, můžete spustit tento příkaz:
sudo ls -lrt /var/opt/mssql/secrets
Pomocí těchto příkazů můžete nastavit oprávnění a úroveň přístupu v souboru keytab:
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 některé z podmínek v této části nejsou splněny, zobrazí se tato nebo ekvivalentní chyba: "Key table entry not found".
Chybová zpráva: Žádná položka nebyla nalezena v tabulce klíčů pro <principál>
Možná příčina
Při pokusu o načtení přihlašovacích údajů <principal> z klávesové zkratky nebyly nalezeny žádné použitelné položky.
Vodítko
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 tomto případě je hlavní účet obvykle network.privilegedadaccount, ke kterému jsou SPN zaregistrovány. Pokud není, přidejte ho pomocí příkazu adutil. Další informace najdete v tématu Použití nástroje adutil ke konfiguraci ověřování služby 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 značí, že SQL Server nemohl najít položku keytab pro požadovaný lístek se zadaným číslem verze klíče (KVNO).
Vodítko
Pokud chcete vypsat všechny položky v keytabu, postupujte podle části tohoto článku Zkontrolujte soubor keytab a oprávnění. Pokud nemůžete najít chybovou zprávu, která odpovídá <principal> a KVNO, přidejte tuto položku aktualizací souboru keytab pomocí kroků uvedených v této části.
Nejnovější KVNO můžete získat také spuštěním následujícího příkazu z DC. Před spuštěním tohoto příkazu potřebujete získat nebo obnovit TGT protokolu Kerberos pomocí příkazu kinit. Další informace najdete v tématu Použití nástroje adutil k vytvoření uživatele služby 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 typ šifrování požadovaný klientem nebyl v tabulce klíčů SQL Serveru k dispozici.
Vodítko
Pokud chcete ověřit, postupujte podle části s pokyny pro kontrolu souboru keytab a oprávnění tohoto dokumentu a vypište všechny položky v keytab. Pokud nemůžete najít chybovou zprávu, která odpovídá hlavnímu prvku, KVNO, a typu šifrování, přidejte tuto položku aktualizací souboru keytab pomocí kroků uvedených v této části.
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 chyba značí, že SQL Server nemohl k dešifrování příchozí žádosti o ověření použít přihlašovací údaje ze souboru keytab. Chyba je často výsledkem nesprávného hesla.
Vodítko
Znovu vytvořte klávesovou zkratku pomocí správného hesla. Pokud používáte adutil, vytvořte keytab se správným heslem pomocí kroků v kurzu: Použití nástroje adutil ke konfiguraci ověřování služby Active Directory s SQL Serverem v Linuxu.
Běžné porty
Tato tabulka ukazuje běžné porty používané SQL Serverem v Linuxu ke konfiguraci a správě ověřování active directory.
| Služba Active Directory | Přístav |
|---|---|
| DNS | 53 |
| LDAP | 389 |
| LDAPS | 636 |
| Kerberos | 88 |