Sdílet prostřednictvím


Kurz: Použití ověřování Active Directory s SQL Serverem v Linuxu

platí pro:SQL Server – Linux

Tento kurz vysvětluje, jak nakonfigurovat SQL Server v Linuxu tak, aby podporoval ověřování Active Directory, označované také jako integrované ověřování. Přehled najdete v tématu Ověřování Active Directory pro SQL Server na Linuxu.

Tento kurz se skládá z následujících úloh:

  • Připojení hostitele SQL Serveru k doméně služby Active Directory
  • Vytvoření uživatele služby Active Directory pro SQL Server a nastavení hlavního názvu služby (SPN)
  • Konfigurace klíče služby SQL Serveru
  • Zabezpečení souboru keytab
  • Konfigurace SQL Serveru pro použití souboru keytab pro ověřování protokolem Kerberos
  • Vytváření přihlášení založených na službě Active Directory v Transact-SQL
  • Připojení k SQL Serveru pomocí ověřování služby Active Directory

Požadavky

Než nakonfigurujete ověřování služby Active Directory, musíte:

Připojení hostitele SQL Serveru k doméně služby Active Directory

Připojte svého hostitele SQL Serveru na Linuxu k řadiči domény Active Directory. Informace o připojení k doméně služby Active Directory naleznete v tématu Připojení SQL Serveru na hostiteli s Linuxem k doméně služby Active Directory.

Vytvoření uživatele služby Active Directory pro SQL Server a nastavení hlavního názvu služby (SPN)

Poznámka:

Následující kroky používají plně kvalifikovaný název domény (FQDN). Pokud jste v Azure, musíte před pokračováním vytvořit plně kvalifikovaný název domény .

  1. Na řadiči domény spusťte příkaz New-ADUser PowerShell a vytvořte nového uživatele služby Active Directory s heslem, jehož platnost nikdy nevyprší. Následující příklad pojmenuje účet sqlsvc, ale název účtu může být cokoli, co se vám líbí. Zobrazí se výzva k zadání nového hesla pro účet.

    Import-Module ActiveDirectory
    
    New-ADUser sqlsvc -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true
    

    Osvědčeným postupem zabezpečení je mít vyhrazený účet služby Active Directory pro SQL Server, aby se přihlašovací údaje instance SQL Serveru nesdílely s jinými službami pomocí stejného účtu. Pokud ale znáte heslo účtu služby Active Directory (což je nutné k vygenerování souboru keytab v dalším kroku), můžete volitelně znovu použít existující účet Active Directory. Kromě toho by měl být účet povolený pro podporu 128bitového a 256bitového šifrování Kerberos AES (msDS-SupportedEncryptionTypes atribut) na uživatelském účtu. Pokud chcete ověřit, že je účet povolený pro šifrování AES, vyhledejte účet v nástroji Uživatelé a počítače služby Active Directory a vyberte Vlastnosti. Vyhledejte kartu Účty ve vlastnostech a ověřte, že jsou zaškrtnutá dvě následující zaškrtávací políčka.

    1. Tento účet podporuje 128bitové šifrování Kerberos AES.
    2. Tento účet podporuje 256bitové šifrování Kerberos AES.
  2. Nastavte servicePrincipalName (SPN) pro tento účet pomocí nástroje setspn.exe . SPN musí být naformátován přesně tak, jak je uvedeno v následujícím příkladu. Plně kvalifikovaný název domény hostitelského počítače s SQL Serverem najdete spuštěním hostname --all-fqdns na hostiteli SQL Serveru. Port TCP by měl být 1433, pokud jste nenakonfigurovali SQL Server tak, aby používal jiné číslo portu.

    setspn -A MSSQLSvc/<fully qualified domain name of host machine>:<tcp port> sqlsvc
    setspn -A MSSQLSvc/<netbios name of the host machine>:<tcp port> sqlsvc
    

    Poznámka:

    Pokud se zobrazí chyba, Insufficient access rights, ověřte u správce domény, zda máte dostatečná oprávnění k nastavení hlavního názvu služby (SPN) pro tento účet. Účet, který je použit k registraci hlavního názvu služby (SPN), bude potřebovat oprávnění Write servicePrincipalName. Další informace viz Registrace názvu hlavní služby pro připojení Kerberos.

    Pokud v budoucnu změníte port TCP, musíte znovu spustit příkaz setspn s novým číslem portu. Musíte také přidat nový hlavní název služby (SPN) do keytabu služby SQL Serveru, jak je uvedeno v následující části.

Další informace viz Registrace názvu hlavní služby pro připojení Kerberos.

Konfigurace klíče služby SQL Serveru

Konfigurace ověřování Active Directory pro SQL Server v Linuxu vyžaduje uživatelský účet služby Active Directory a hlavní název služby (SPN) vytvořený v předchozí části.

Důležité

Pokud se změní heslo pro účet Active Directory nebo pro účet, ke kterému jsou přiřazeny hlavní názvy služeb (SPN), musíte aktualizovat keytab s novým heslem a číslem verze klíče (KVNO). Některé služby můžou hesla také automaticky obměňovat. Zkontrolujte všechny zásady obměně hesel pro příslušné účty a zarovnejte je s naplánovanými aktivitami údržby, abyste se vyhnuli neočekávaným výpadkům.

Položky klíčového názvu služby (SPN) v keytabu

  1. Zkontrolujte číslo verze klíče (KVNO) pro účet služby Active Directory vytvořený v předchozím kroku. Obvykle je to 2, ale může to být jiné celé číslo, pokud jste heslo účtu změnili několikrát. Na hostitelském počítači s SQL Serverem spusťte následující příkazy:

    • Následující příklady předpokládají, že user je v doméně @CONTOSO.COM . Upravte jméno uživatele a název domény na vaše vlastní jméno uživatele a název domény.
    kinit user@CONTOSO.COM
    kvno user@CONTOSO.COM
    kvno MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM
    

    Poznámka:

    Šíření SPN (Service Principal Names) v rámci vaší domény může trvat několik minut, zejména pokud je doména velká. Pokud se zobrazí chyba, kvno: Server not found in Kerberos database while getting credentials for MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COMpočkejte několik minut a zkuste to znovu. Předchozí příkazy fungují jenom v případě, že je server připojený k doméně služby Active Directory, která byla popsána v předchozí části.

  2. Pomocí ktpass přidejte položky klíčových tabulek pro každý SPN použitím následujících příkazů na příkazovém řádku Windows:

    • <DomainName>\<UserName> – Uživatelský účet služby Active Directory
    • @CONTOSO.COM – Použijte název domény.
    • /kvno <#> - Nahraďte <#> KVNO, které jste získali v předchozím kroku.
    • <password> – Vaše heslo by mělo postupovat podle výchozích zásad hesel SQL Serveru. Ve výchozím nastavení musí heslo obsahovat alespoň osm znaků a musí obsahovat znaky ze tří z následujících čtyř sad: velká písmena, malá písmena, číslice se základem 10 a symboly. Hesla můžou mít délku až 128 znaků. Používejte hesla, která jsou co nejdéle a složitá.
    ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ MSSQLSvc/<netbios name of the host machine>:<tcp port>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto aes256-sha1 /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    
    ktpass /princ <UserName>@CONTOSO.COM /ptype KRB5_NT_PRINCIPAL /crypto rc4-hmac-nt /mapuser <DomainName>\<UserName> /in mssql.keytab /out mssql.keytab -setpass -setupn /kvno <#> /pass <password>
    

    Předchozí příkazy umožňují šifrování AES i RC4 pro ověřování active directory. RC4 je starší šifrovací šifra a pokud je vyžadován vyšší stupeň zabezpečení, můžete se rozhodnout vytvořit položky keytab s pouze šifrovací šifrou AES.

    Poznámka:

    Poslední dvě UserName položky musí být malými písmeny nebo ověření oprávnění může selhat.

  3. Po spuštění předchozích příkazů byste měli mít soubor keytab s názvem mssql.keytab. Zkopírujte soubor do počítače s SQL Serverem ve složce /var/opt/mssql/secrets.

  4. Zabezpečte soubor keytab.

    Každý, kdo má přístup k tomuto souboru keytab, může zosobnit SQL Server v doméně, takže zajistěte, abyste omezili přístup k souboru tak, aby přístup ke čtení měl jenom účet mssql:

    sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab
    sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab
    
  5. Pomocí nástroje mssql-conf je potřeba nastavit následující možnost konfigurace, aby bylo možné určit účet, který se má použít při přístupu k souboru keytab.

    sudo mssql-conf set network.privilegedadaccount <username>
    

    Poznámka:

    Uveďte pouze uživatelské jméno, nikoli název_domény\uživatelské_jméno nebo username@domain. SQL Server interně přidá název domény podle potřeby spolu s tímto uživatelským jménem při použití.

  6. Pomocí následujícího postupu nakonfigurujte SQL Server tak, aby začal používat soubor keytab pro ověřování protokolem Kerberos.

    sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    sudo systemctl restart mssql-server
    

    Volitelně můžete zakázat připojení UDP k řadiči domény, aby se zlepšil výkon. V mnoha případech spojení UDP opakovaně selhávají při připojování k řadiči domény, takže můžete v /etc/krb5.conf nastavit možnosti konfigurace tak, aby byla volání UDP přeskočena. Upravte /etc/krb5.conf a nastavte následující možnosti:

    /etc/krb5.conf
    [libdefaults]
    udp_preference_limit=0
    

V tuto chvíli jste připraveni používat přihlášení založená na službě Active Directory na SQL Serveru.

Vytváření přihlášení založených na službě Active Directory v Transact-SQL

  1. Připojte se k SQL Serveru a vytvořte nové přihlášení založené na službě Active Directory:

    CREATE LOGIN [CONTOSO\user]
        FROM WINDOWS;
    
  2. Ověřte, že přihlášení je teď uvedené v zobrazení katalogu systému sys.server_principals :

    SELECT name
    FROM sys.server_principals;
    

Připojení k SQL Serveru pomocí ověřování Active Directory

Přihlaste se k klientskému počítači pomocí přihlašovacích údajů k doméně. Teď se můžete připojit k SQL Serveru, aniž byste museli znovu zadávat heslo pomocí ověřování služby Active Directory. Pokud vytvoříte přihlášení pro skupinu Active Directory, může se každý uživatel služby Active Directory, který je členem této skupiny, připojit stejným způsobem.

Konkrétní parametr připojovacího řetězce pro klienty, kteří používají ověřování active directory, závisí na tom, který ovladač používáte. Podívejte se na příklady v následujících částech.

Sqlcmd v klientovi Linuxu připojeném k doméně

Přihlaste se k linuxovém klientovi připojenému k doméně pomocí ssh a přihlašovacích údajů k doméně:

ssh -l user@contoso.com client.contoso.com

Ujistěte se, že jste nainstalovali balíček mssql-tools , a pak se připojte pomocí sqlcmd bez zadání přihlašovacích údajů:

sqlcmd -S mssql-host.contoso.com

Na rozdíl od SQL ve Windows, ověřování Kerberos funguje pro místní připojení v SQL Linuxu. Ovšem stále potřebujete zadat plně kvalifikovaný název domény hostitele SQL Linux a ověřování Active Directory nebude fungovat, pokud se pokusíte připojit k ., localhost, 127.0.0.1 atd.

SSMS na klientovi Windows připojeném k doméně

Přihlaste se k klientovi Windows připojenému k doméně pomocí přihlašovacích údajů k doméně. Ujistěte se, že je aplikace SQL Server Management Studio nainstalovaná, a pak se připojte k instanci SQL Serveru (například mssql-host.contoso.com) zadáním ověřování systému Windows v dialogovém okně Připojit k serveru .

Ověřování active directory pomocí jiných klientských ovladačů

Následující tabulka popisuje doporučení pro ostatní klientské ovladače:

Klientský ovladač Doporučení
JDBC K připojení SQL Serveru použijte integrované ověřování Kerberos.
ODBC Použijte integrované ověřování.
ADO.NET Syntaxe připojovacího řetězce

Další možnosti konfigurace

Pokud k připojení hostitele Linuxu k doméně služby Active Directory používáte nástroje třetích stran, jako jsou PBIS, VAS nebo Centrify , a chcete vynutit, aby SQL Server používal knihovnu OpenLDAP přímo, můžete tuto možnost nakonfigurovat disablesssd pomocí příkazu mssql-conf následujícím způsobem:

sudo mssql-conf set network.disablesssd true
systemctl restart mssql-server

Poznámka:

Existují nástroje, například realmd, které nastavují SSSD, zatímco jiné nástroje, jako jsou PBIS, VAS a Centrify, nenastavují SSSD. Pokud nástroj použitý k připojení k doméně služby Active Directory nenakonfiguruje SSSD, měli byste nakonfigurovat disablesssd volbu true. I když není potřeba, protože SQL Server se pokusí použít SSSD pro Active Directory před návratem do mechanismu OpenLDAP, bylo by výkonnější ho nakonfigurovat tak, aby SQL Server volání OpenLDAP přímo obešel mechanismus SSSD.

Pokud váš řadič domény podporuje LDAPS, můžete vynutit, aby všechna připojení z SQL Serveru k řadičům domény byla přes LDAPS. Pokud chcete zkontrolovat, jestli klient může kontaktovat řadič domény přes LDAPS, spusťte následující příkaz Bash. ldapsearch -H ldaps://contoso.com:3269 Pokud chcete nastavit SQL Server tak, aby používal pouze LDAPS, spusťte následující příkaz:

sudo mssql-conf set network.forcesecureldap true
systemctl restart mssql-server

To bude používat LDAPS přes SSSD, pokud bylo připojení k doméně Active Directory na hostiteli provedeno prostřednictvím balíčku SSSD a disablesssd není nastaveno na true. Pokud disablesssd je nastavena na hodnotu true spolu s forcesecureldap nastavenou na hodnotu true, použije protokol LDAPS přes volání knihovny OpenLDAP prováděných SQL Serverem.

Post SQL Server 2017 CU 14

Od verze SQL Server 2017 (14.x) CU 14 platí, že pokud byl SQL Server připojený k řadiči domény služby Active Directory pomocí poskytovatelů třetích stran a je nakonfigurovaný tak, aby používal volání OpenLDAP pro obecné vyhledávání služby Active Directory nastavením disablesssd na hodnotu true, můžete také použít enablekdcfromkrb5 možnost vynutit sql Server používat knihovnu krb5 pro vyhledávání KDC místo zpětného vyhledávání DNS pro server KDC.

To může být užitečné pro scénář, ve kterém chcete ručně nakonfigurovat řadiče domény, se kterými se SQL Server pokouší komunikovat. A použijete mechanismus knihovny OpenLDAP pomocí seznamu KDC v souboru krb5.conf.

Nejprve nastavte disablesssd hodnotu True a enablekdcfromkrb5conf potom restartujte SQL Server:

sudo mssql-conf set network.disablesssd true
sudo mssql-conf set network.enablekdcfromkrb5conf true
systemctl restart mssql-server

Následně seznam KDC v /etc/krb5.conf konfigurujte následujícím způsobem:

[realms]
CONTOSO.COM = {
  kdc = dcWithGC1.contoso.com
  kdc = dcWithGC2.contoso.com
}

I když se to nedoporučuje, je možné použít nástroje, jako je realmd, které nakonfigurují SSSD při připojení Linuxového hostitele do domény, a současně nastavit disablesssd na hodnotu true, aby SQL Server používal volání OpenLDAP místo SSSD pro volání související s Active Directory.

Poznámka:

Přihlášení k SQL Serveru pomocí plně kvalifikovaného názvu domény (například CONTOSO.COM\Username) se nepodporuje. Použijte formát CONTOSO\Username.

Přihlášení k SQL Serveru z místních skupin domény se nepodporují. Místo toho použijte skupiny globálních domén zabezpečení.

Přispějte k dokumentaci SQL

Věděli jste, že obsah SQL můžete upravovat sami? Pokud to uděláte, nejen že vám pomůžete vylepšit naši dokumentaci, ale také jste získali kredit jako přispěvatel na stránku.

Další informace naleznete v Upravit dokumentaci Microsoft Learn.