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

Platí pro:SQL Server na Linuxu

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

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

  • Připojte hostitele SQL Server k doméně služba Active Directory
  • Vytvořte uživatele služba Active Directory pro SQL Server a nastavte 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ě služba Active Directory v Transact-SQL
  • Připojení k SQL Serveru pomocí ověřování služba Active Directory

Předpoklady

Než nakonfigurujete autentizaci v služba Active Directory, musíte:

Note

Od verze SQL Server 2025 (17.x) se nepodporuje SUSE Linux Enterprise Server (SLES).

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

Připojte svůj hostitel SQL Server Linux k služba Active Directory doménovému řadiči. Pro informace o tom, jak se připojit k doméně služba Active Directory, viz Připojit SQL Server na hostiteli Linuxu k doméně služba Active Directory.

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

Note

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 služba 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 služba 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 služba Active Directory (což je nutné k vygenerování souboru keytab v dalším kroku), můžete volitelně znovu použít existující účet služba 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 pro tento účet název principal služby (SPN) 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
    

    Note

    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í služba Active Directory pro SQL Server v Linuxu vyžaduje uživatelský účet služby služba Active Directory a hlavní název služby (SPN) vytvořený v předchozí části.

Important

Pokud se změní heslo pro účet služba 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žba Active Directory vytvořený v předchozí sekci. 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
    

    Note

    Šíř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 služba Active Directory, která byla popsána v předchozí části.

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

    • <DomainName>\<UserName> – Uživatelský účet služby služba 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.

    Note

    Poslední dva UserName záznamy musí být malými písmeny, jinak může autentizace 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. Aby se zadal účet, který se má použít při přístupu k souboru keytab, je nutné použít nástroj mssql-conf k nastavení následující konfigurační možnosti.

    sudo mssql-conf set network.privilegedadaccount <username>
    

    Note

    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:

    [libdefaults]
    udp_preference_limit = 0
    

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

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

  1. Připojte se k SQL Serveru a vytvořte nové přihlášení založené na službě služba 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í služba 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 služba Active Directory. Pokud vytvoříte přihlášení pro skupinu služba Active Directory, může se každý uživatel služby služba 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 bez zadání přihlašovacích údajů pomocí sqlcmd.

sqlcmd -S mssql-host.contoso.com

Na rozdíl od SQL Server na Windows funguje ověření pomocí Kerberosu pro lokální připojení k SQL Server on Linux. Nicméně stále musíte poskytnout FQDN hostitele SQL Server. Autentizace v služba Active Directory nebude fungovat, pokud se pokusíte připojit k ., localhost, nebo 127.0.0.1.

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č Recommendation
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 používáte nástroje třetích stran jako PBIS,VAS nebo Centrify k připojení Linux hostitele k doméně služba Active Directory a chcete donutit SQL Server používat přímo knihovnu OpenLDAP, můžete tuto disablesssd možnost nastavit taktomssql-conf:

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

Note

Existují nástroje jako RealMD , které nastavují SSSD, zatímco jiné nástroje jako PBIS, VAS a Centrify SSSD nenastavují. Pokud nástroj používaný pro připojení do domény služba Active Directory nenastaví SSSD, měli byste nastavit disablesssd možnost na true. Není to nutné, protože SQL Server se snaží použít SSSD pro služba Active Directory a poté se vrátí k mechanismu OpenLDAP, ale konfigurace této možnosti umožňuje SQL Server přímo volat OpenLDAP a obejít 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
sudo systemctl restart mssql-server

SQL Server používá LDAPS místo SSSD, pokud hostitel přešel do domény služba Active Directory pomocí SSSD a disablesssd není nastaven na true. Pokud jsou disablesssd i forcesecureldap nastaveny na true, SQL Server používá LDAPS přes OpenLDAP.

SQL Server 2017 CU 14 a pozdější verze

Počínaje SQL Serverem 2017 (14.x) CU 14 platí, že pokud byl SQL Server připojen k doméně služby služba Active Directory pomocí poskytovatelů třetích stran a je nakonfigurován tak, aby pro obecné vyhledávání ve službě služba Active Directory používal volání OpenLDAP nastavením disablesssd na true, můžete také použít možnost enablekdcfromkrb5conf, která vynutí, aby SQL Server pro vyhledání KDC používal knihovnu krb5 místo reverzního vyhledávání DNS serveru KDC.

To může být užitečné, když chcete ručně konfigurovat doménové řadiče, se kterými se SQL Server snaží komunikovat, a použít mechanismus knihovny OpenLDAP s KDC seznamem v 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
sudo 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 služba Active Directory.

Note

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.