Principy ověřování Active Directory pro SQL Server v Linuxu a kontejnerech
platí pro:SQL Server – Linux
Tento článek obsahuje podrobnosti o tom, jak funguje ověřování Active Directory pro SQL Server nasazený v Linuxu nebo kontejnerech.
Koncepty
Protokol LDAP (Lightweight Directory Access Protocol)
LDAP je aplikační protokol pro práci s různými adresářovými službami, včetně služby Active Directory. Adresářové služby ukládají informace o uživateli a účtu a informace o zabezpečení, jako jsou hesla. Informace se šifrují a pak sdílí s jinými zařízeními v síti.
Další informace o zabezpečení PROTOKOLU LDAP najdete v tématu Jak povolit přihlašování ldap v systému Windows Server.
Kerberos
Kerberos je ověřovací protokol používaný k ověření identity uživatele nebo hostitelského počítače. Můžete si to představit jako způsob, jak ověřit klienta a server.
Když pracujete v heterogenním (smíšeném) prostředí, kde máte servery a klienty Windows a jiné systémy než Windows, musíte pracovat se dvěma typy souborů, které potřebujete pracovat s adresářovými službami založenými na službě Active Directory:
- Soubory keytab (zkráceně pro "klíčové tabulky")
- Konfigurační soubory Kerberos (
krb5.conf
nebokrb5.ini
)
Co je soubor keytab?
Serverové procesy v systémech Linux nebo Unix nelze nakonfigurovat tak, aby spouštěly procesy s účtem služby systému Windows. Pokud chcete, aby se systém Linux nebo Unix automaticky přihlásil ke službě Active Directory při spuštění, musíte použít soubor keytab.
Keytab je kryptografický soubor obsahující reprezentaci služby chráněné protokolem Kerberos a dlouhodobý klíč jejího přidruženého názvu hlavní služby v Centru distribuce klíčů (KDC). Klíč není samotné heslo.
Klávesové zkratky se používají pro:
- ověřit samotnou službu vůči jiné službě v síti nebo
- dešifrujte lístek služby Kerberos příchozího uživatele adresáře do služby.
Co je soubor krb5.conf
?
Soubor /etc/krb5.conf
(označovaný také jako krb5.ini
) poskytuje vstupy konfigurace pro knihovny Kerberos v5 (KRB5) a GNU Simple Authentication and Security Layer API (GSSAPI).
Tyto informace zahrnují výchozí doménu, vlastnosti každé domény (například distribuční centra klíčů) a výchozí životnost lístku Kerberos.
Tento soubor je nezbytný k tomu, aby ověřování služby Active Directory fungovalo.
krb5.conf
je soubor INI, ale každá hodnota v páru klíč-hodnota může být podskupina uzavřená mezi {
a }
.
Další informace o souboru krb5.conf
naleznete v dokumentaci MIT Kerberos Consortium.
Konfigurace protokolu Kerberos pro SQL Server v Linuxu
Jedná se o hodnoty, které potřebujete na hostitelském serveru s SQL Serverem v Linuxu. Pokud máte na stejném hostiteli spuštěné jiné služby (než SQL Server), může váš soubor krb5.conf
potřebovat několik dalších položek.
Tady je ukázkový soubor krb5.conf
pro referenci:
[libdefaults]
default_realm = CONTOSO.COM
[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
libdefaults
– musí existovat hodnotadefault_realm
. Tato hodnota určuje doménu, do které patří hostitelský počítač.realms
(volitelné) – Pro každou doménu může být hodnotakdc
nastavena tak, aby určovala, která Key Distribution Centers má počítač kontaktovat při vyhledávání účtů v Active Directory. Pokud jste nastavili více KDC, bude KDC pro každé připojení vybráno kruhovým dotazováním.domain_realm
(volitelné) – Je možné poskytnout mapování pro každou sféru. Pokud ne, SQL Server v Linuxu předpokládá, že doménacontoso.com
mapuje na sféruCONTOSO.COM
.
Proces ověřování protokolem Kerberos
Podobně jako u Kerberos autentizace ve Windows jsou první dva kroky k získání pověřovacího lístku (TGT) stejné:
Klient zahájí proces přihlášení odesláním uživatelského jména a hesla (šifrovaného) do řadiče domény (DC).
Po kontrole uživatelského jména a hesla vůči internímu úložišti řadič domény vrátí klientovi TGT.
SQL Server v Linuxu používá soubor keytab ke čtení hesla pro hlavní název služby (SPN) a dešifruje šifrovaný objekt blob, který používá k autorizaci připojení. Další kroky popisují tento proces.
Jakmile má uživatel TGT, klient spustí připojení k SQL Serveru zadáním názvu hostitele a portu instance SQL Serveru.
Klient SQL interně vytvoří instanční název ve formátu
MSSQLSvc/<host>:<port>
. Jedná se o pevně zakódovaný formát ve většině klientů SQL Serveru.Klient zahájí handshake protokolu Kerberos tím, že požádá o klíč relace z DC pro tento SPN. TGT i SPN se odesílají do řadiče domény.
- Jakmile řadič domény ověří hlavní název služby (TGT) a hlavní název služby (SPN) klienta, odešle klíč relace klientovi pro připojení k hlavnímu názvu služby (SPN) SQL Serveru.
- Šifrovaný blob vytvořený z klíče relace se odešle na server.
SQL Server přečte heslo hlavního názvu služby ze svého keytabu (
mssql.keytab
), což je soubor na disku obsahující šifrované dvojice (SPN, heslo).SQL Server dešifruje šifrovaný objekt blob z klienta pomocí hesla, které právě hledal, a získá uživatelské jméno klienta.
SQL Server vyhledá klienta v tabulce
sys.syslogins
a zkontroluje, jestli má klient oprávnění k připojení.Připojení je buď přijato, nebo zamítnuto.
Konfigurace protokolu Kerberos pro kontejnery SQL Serveru
Ověřování Active Directory pro SQL Server v kontejnerech je v podstatě stejné jako SQL Server v Linuxu. Jediným rozdílem je hlavní název služby hostitele SQL Serveru SPN. V předchozím scénáři byl SPN MSSQLSvc/<host>:<port>
, protože jsme se připojovali pomocí názvu hostitele SQL Serveru. Teď se ale musíme připojit k kontejneru.
Pro kontejnery SQL Serveru můžete vytvořit soubor krb5.conf
uvnitř kontejneru. Hostitelský uzel, na kterém je spuštěný kontejner, nemusí být součástí domény, ale měl by být schopný se připojit k řadiči domény, ke kterému se kontejner pokusí připojit.
Vzhledem k tomu, že se připojujeme k kontejneru, může se název serveru v připojení klienta lišit od názvu hostitele. Může to být název hostitele, název kontejneru nebo jiný alias. Kromě toho existuje dobrá šance, že vystavený port pro SQL Server nebude výchozí 1433
.
Musíte použít hlavní název služby (SPN), který je uložený v mssql.keytab
pro připojení k kontejneru SQL Serveru. Pokud je například SPN v mssql.keytab
MSSQLSvc/sqlcontainer.domain.com:8000
, použili byste v klientovi jako připojovací řetězec sqlcontainer.domain.com,8000
(včetně sqlcmd, SQL Server Management Studio a Azure Data Studio).
Aktualizace skupiny SQL Serveru
Možná vás zajímá, proč je v tabulce klíčů uživatelský účet, pokud k ověření potřebujete jenom hlavní název služby.
Představte si, že máte uživatele adUser, což je člen skupiny adGroup. Pokud adGroup přidáte jako přihlášení k SQL Serveru, znamená to, že adUser má také oprávnění přihlásit se k instanci SQL Serveru. Zatímco adUser je stále připojen k SQL Serveru, správce domény může odebrat adUser z adGroup. Teď by adUser už neměl mít oprávnění k přihlášení k SQL Serveru, ale již prošli procesem ověřování Kerberos a jsou již připojeni.
Pravidelně spouštíme proces označovaný jako aktualizace skupiny k ochraně před scénářem, kdy už připojený uživatel nesmí provádět privilegovanou akci (například vytvoření přihlášení nebo změnu databáze).
SQL Server má privilegovaný účet služby Active Directory, který používá k aktualizaci skupiny. Tento účet je buď nakonfigurovaný pomocí mssql-conf s nastavením network.privilegedadaccount, nebo se jako výchozí používá účet hostitelského počítače (<hostname>$
).
Přihlašovací údaje pro privilegovaný účet v mssql.keytab
slouží k zosobnění klienta (adUser v tomto příkladu). SQL Server provádí metodu handshake protokolu Kerberos, která identifikuje informace o členství ve skupině, a porovná je s sys.syslogins
, aby zkontroloval, jestli adUser stále má oprávnění potřebná k připojení a spuštění požadovaných příkazů Transact-SQL. Pokud adUser byl odebrán z adGroup, připojení je ukončeno SQL Serverem.
Aktualizace skupiny vyžaduje následující dvě podmínky:
- Síťové připojení mezi instancí SQL Serveru a místní doménou služby Active Directory.
- Obousměrný vztah důvěryhodnosti mezi doménou, ke které je SQL Server připojený, a místní doménou služby Active Directory. Další informace najdete v tématu Principyslužby Active Directory .