Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för:SQL Server i Linux
I den här självstudien beskrivs hur du konfigurerar SQL Server på Linux för att stödja služba Active Directory-autentisering, även kallat integrerad autentisering. En översikt finns i služba Active Directory-autentisering för SQL Server på Linux.
Den här självstudien består av följande uppgifter:
- Koppla SQL Server-värden till en služba Active Directory-domän
- Skapa en služba Active Directory-användare för SQL Server och sätt in ett SPN
- Konfigurera nyckelfliken för SQL Server-tjänsten
- Skydda nyckelfliksfilen
- Konfigurera SQL Server för att använda nyckelfliksfilen för Kerberos-autentisering
- Skapa služba Active Directory-baserade inloggningar i Transact-SQL
- Ansluta till SQL Server med Hjälp av služba Active Directory-autentisering
Förutsättningar
Innan du konfigurerar služba Active Directory-autentisering måste du:
- Sätt upp en služba Active Directory-domänkontroller (Windows) på ditt nätverk
- Installera SQL Server
Note
Från och med SQL Server 2025 (17.x) stöds inte SUSE Linux Enterprise Server (SLES).
Anslut SQL Server-värden till en služba Active Directory-domän
Koppla din SQL Server Linux-värd till en služba Active Directory-domänkontrollant. För information om hur du ansluter till en služba Active Directory-domän, se Ansluta SQL Server på en Linux-värd till en služba Active Directory-domän.
Skapa služba Active Directory-användare för SQL Server och ange SPN
Note
Följande steg använder ditt fullständigt kvalificerade domännamn (FQDN). Om du använder Azure måste du skapa ett FQDN- innan du fortsätter.
Kör kommandot New-ADUser PowerShell på domänkontrollanten för att skapa en ny služba Active Directory-användare med ett lösenord som aldrig upphör att gälla. I följande exempel namnges kontot
sqlsvc, men kontonamnet kan vara vad du vill. Du uppmanas att ange ett nytt lösenord för kontot.Import-Module ActiveDirectory New-ADUser sqlsvc -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $trueDet är en säkerhetsmetod att ha ett dedikerat služba Active Directory-konto för SQL Server, så att autentiseringsuppgifterna för SQL Server-instansen inte delas med andra tjänster med samma konto. Du kan dock återanvända ett befintligt služba Active Directory-konto om du känner till kontots lösenord (vilket krävs för att generera en nyckelfliksfil i nästa steg). Dessutom bör kontot vara aktiverat för att stödja 128-bitars och 256-bitars Kerberos AES-kryptering (
msDS-SupportedEncryptionTypesattribut) för användarkontot. Om du vill verifiera att kontot är aktiverat för AES-kryptering letar du upp kontot i Active Directory- verktyg och väljer Egenskaper. Leta upp fliken Konton i Egenskaperoch kontrollera att följande två kryssrutor är markerade.- Det här kontot stöder Kerberos AES 128-bitarskryptering
- Det här kontot stöder Kerberos AES 256-bitarskryptering
Ange tjänsthuvudnamnet (SPN) för det här kontot med verktyget setspn.exe. SPN måste formateras exakt enligt vad som anges i följande exempel. Du hittar det fullständigt kvalificerade domännamnet för SQL Server-värddatorn genom att köra
hostname --all-fqdnspå SQL Server-värddatorn. TCP-porten ska vara 1433 om du inte har konfigurerat SQL Server att använda ett annat portnummer.setspn -A MSSQLSvc/<fully qualified domain name of host machine>:<tcp port> sqlsvc setspn -A MSSQLSvc/<netbios name of the host machine>:<tcp port> sqlsvcNote
Om du får ett fel
Insufficient access rightskontrollerar du med domänadministratören att du har tillräcklig behörighet för att ange ett SPN för det här kontot. Det konto som används för att registrera ett SPN behöverWrite servicePrincipalNamebehörigheter. För mer information, se Registrera ett tjänsthuvudnamn för Kerberos-anslutningar.Om du ändrar TCP-porten i framtiden måste du köra kommandot setspn igen med det nya portnumret. Du måste också lägga till det nya SPN i nyckelfliken SQL Server-tjänsten genom att följa stegen i nästa avsnitt.
För mer information, se Registrera ett tjänsthuvudnamn för Kerberos-anslutningar.
Konfigurera nyckelfliken för SQL Server-tjänsten
För att konfigurera služba Active Directory-autentisering för SQL Server i Linux krävs ett služba Active Directory-användarkonto och det SPN som skapades i föregående avsnitt.
Important
Om lösenordet för služba Active Directory-kontot ändras eller lösenordet för det konto som SPN:erna har tilldelats ändras, måste du uppdatera nyckelfliken med det nya lösenordet och nyckelversionsnumret (KVNO). Vissa tjänster kan också rotera lösenorden automatiskt. Granska eventuella principer för lösenordsrotation för de aktuella kontona och anpassa dem till schemalagda underhållsaktiviteter för att undvika oväntade driftstopp.
SPN-nyckelfliksposter
Kontrollera Key Version Number (KVNO) för služba Active Directory-kontot som skapades i föregående avsnitt. Vanligtvis är det 2, men det kan vara ett annat heltal om du har ändrat kontots lösenord flera gånger. Kör följande kommandon på SQL Server-värddatorn:
- Exemplen nedan förutsätter att
userfinns i domänen@CONTOSO.COM. Ändra användaren och domännamnet till ditt användarnamn och domännamn.
kinit user@CONTOSO.COM kvno user@CONTOSO.COM kvno MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COMNote
DET kan ta flera minuter för SPN att spridas via din domän, särskilt om domänen är stor. Om du får felet
kvno: Server not found in Kerberos database while getting credentials for MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COMväntar du några minuter och försöker igen. De tidigare kommandona fungerar bara om servern har anslutits till en služba Active Directory-domän, som beskrevs i ett tidigare avsnitt.- Exemplen nedan förutsätter att
Med ktpass lägger du till tangentposter för varje SPN med följande kommandon i ett Windows-kommandoprompt:
-
<DomainName>\<UserName>– služba Active Directory-användarkonto -
@CONTOSO.COM– Använd ditt domännamn -
/kvno <#>– Ersätt<#>med KVNO som erhölls i ett tidigare steg -
<password>– Lösenordet bör följa SQL Server-standardprincipen lösenordsprincip. Lösenordet måste som standard vara minst åtta tecken långt och innehålla tecken från tre av följande fyra uppsättningar: versaler, gemener, bas-10 siffror och symboler. Lösenord kan vara upp till 128 tecken långa. Använd lösenord som är så långa och komplexa som möjligt.
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>De tidigare kommandona tillåter både AES- och RC4-krypteringskryptering för služba Active Directory-autentisering. RC4 är en gammal krypteringsalgoritm och om en högre säkerhetsnivå krävs kan du välja att skapa keytab-posterna med endast AES-krypteringsalgoritmen.
Note
De två sista
UserNameposterna måste skrivas med små bokstäver, annars kan autentiseringen misslyckas.-
När du har kört föregående kommandon bör du ha en nyckelfliksfil med namnet
mssql.keytab. Kopiera filen till SQL Server-datorn under mappen/var/opt/mssql/secrets.Skydda nyckelfliksfilen.
Alla som har åtkomst till den här nyckelfliksfilen kan personifiera SQL Server på domänen, så se till att du begränsar åtkomsten till filen så att endast mssql-kontot har läsåtkomst:
sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab sudo chmod 400 /var/opt/mssql/secrets/mssql.keytabFöljande konfigurationsalternativ måste anges med
mssql-confverktyget för att ange det konto som ska användas vid åtkomst till nyckelfliksfilen.sudo mssql-conf set network.privilegedadaccount <username>Note
Inkludera endast användarnamnet och inte domännamnet\användarnamnet eller username@domain. SQL Server lägger internt till domännamn som krävs tillsammans med det här användarnamnet när det används.
Använd följande steg för att konfigurera SQL Server att börja använda nyckelfliksfilen för Kerberos-autentisering.
sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab sudo systemctl restart mssql-serverDu kan också inaktivera UDP-anslutningar till domänkontrollanten för att förbättra prestandan. I många fall misslyckas UDP-anslutningar konsekvent när du ansluter till en domänkontrollant, så du kan ange konfigurationsalternativ i
/etc/krb5.confför att hoppa över UDP-anrop. Redigera/etc/krb5.confoch ange följande alternativ:[libdefaults] udp_preference_limit = 0
Nu är du redo att använda služba Active Directory-baserade inloggningar i SQL Server.
Skapa služba Active Directory-baserade inloggningar i Transact-SQL
Anslut till SQL Server och skapa en ny služba Active Directory-baserad inloggning:
CREATE LOGIN [CONTOSO\user] FROM WINDOWS;Kontrollera att inloggningen nu visas i systemkatalogvyn sys.server_principals.
SELECT name FROM sys.server_principals;
Ansluta till SQL Server med Hjälp av služba Active Directory-autentisering
Logga in på en klientdator med dina domänautentiseringsuppgifter. Nu kan du ansluta till SQL Server utan att ange lösenordet igen med hjälp av služba Active Directory-autentisering. Om du skapar en inloggning för en služba Active Directory-grupp kan alla služba Active Directory-användare som är medlem i gruppen ansluta på samma sätt.
Den specifika anslutningssträngsparametern för klienter som ska använda služba Active Directory-autentisering beror på vilken drivrutin du använder. Tänk på exemplen i följande avsnitt.
sqlcmd på en domänansluten Linux-klient
Logga in på en domänansluten Linux-klient med ssh- och dina domänautentiseringsuppgifter:
ssh -l user@contoso.com client.contoso.com
Kontrollera att du har installerat paketet mssql-tools och anslut sedan med sqlcmd utan att ange några autentiseringsuppgifter.
sqlcmd -S mssql-host.contoso.com
Till skillnad från SQL Server på Windows fungerar Kerberos-autentisering för lokala anslutningar till SQL Server on Linux. Du måste dock fortfarande ange FQDN för SQL Server-värddatorn. služba Active Directory-autentisering fungerar inte om du försöker ansluta till ., localhost, eller 127.0.0.1.
SSMS på en domänansluten Windows-klient
Logga in på en domänansluten Windows-klient med dina domänautentiseringsuppgifter. Kontrollera att SQL Server Management Studio är installerat och anslut sedan till SQL Server-instansen (till exempel mssql-host.contoso.com) genom att ange Windows-autentisering i dialogrutan Anslut till server.
služba Active Directory-autentisering med andra klientdrivrutiner
I följande tabell beskrivs rekommendationer för andra klientdrivrutiner:
| Klientdrivrutin | Recommendation |
|---|---|
| JDBC | Använd Kerberos-integrerad autentisering för att ansluta SQL Server. |
| ODBC | Använd integrerad autentisering. |
| ADO.NET | Syntax för anslutningssträng. |
Ytterligare konfigurationsalternativ
Om du använder tredjepartsverktyg som PBIS,VAS eller Centrify för att ansluta Linux-värden till en služba Active Directory-domän och vill tvinga SQL Server att använda OpenLDAP-biblioteket direkt, kan du konfigurera disablesssd alternativet med mssql-conf följande:
sudo mssql-conf set network.disablesssd true
sudo systemctl restart mssql-server
Note
Det finns verktyg som Realmd som sätter upp SSSD, medan andra verktyg som PBIS, VAS och Centrify inte sätter upp SSSD. Om verktyget som används för att ansluta till služba Active Directory-domänen inte ställer upp SSSD, bör du konfigurera disablesssd alternativet till .true Även om det inte krävs eftersom SQL Server försöker använda SSSD för služba Active Directory innan de återgår till OpenLDAP-mekanismen, tillåter konfigurationen av detta alternativ att SQL Server kan göra OpenLDAP-anrop direkt och kringgå SSSD.
Om domänkontrollanten stöder LDAPS kan du tvinga alla anslutningar från SQL Server till domänkontrollanterna att vara över LDAPS. Kontrollera att klienten kan kontakta domänkontrollanten via LDAPS genom att köra följande bash-kommando ldapsearch -H ldaps://contoso.com:3269. Om du vill ange att SQL Server endast ska använda LDAPS kör du följande:
sudo mssql-conf set network.forcesecureldap true
sudo systemctl restart mssql-server
SQL Server använder LDAPS över SSSD om värden har anslutits till služba Active Directory-domänen med SSSD och disablesssd inte är inställt på true. Om både disablesssd och forcesecureldap är inställda på true, använder SQL Server LDAPS istället för OpenLDAP.
SQL Server 2017 CU 14 och senare versioner
Från och med SQL Server 2017 (14.x) CU 14, om SQL Server var ansluten till en služba Active Directory-domänkontrollant med hjälp av tredjepartsleverantörer och är konfigurerad att använda OpenLDAP-anrop för allmän služba Active Directory-uppslagning genom att ställa disablesssd in på true, kan du också använda enablekdcfromkrb5conf alternativet att tvinga SQL Server att använda krb5-biblioteket för KDC-uppslagning istället för omvänd DNS-uppslagning för KDC-servern.
Detta kan vara användbart när du vill konfigurera domänkontrollerna som SQL Server försöker kommunicera med manuellt och använda OpenLDAP-biblioteksmekanismen med KDC-listan i krb5.conf.
Ange först disablesssd och enablekdcfromkrb5conf till true och starta sedan om SQL Server:
sudo mssql-conf set network.disablesssd true
sudo mssql-conf set network.enablekdcfromkrb5conf true
sudo systemctl restart mssql-server
Konfigurera sedan KDC-listan i /etc/krb5.conf enligt följande:
[realms]
CONTOSO.COM = {
kdc = dcWithGC1.contoso.com
kdc = dcWithGC2.contoso.com
}
Även om det inte rekommenderas är det möjligt att använda verktyg som realmd, vilka konfigurerar SSSD när du ansluter Linux-värden till domänen, samtidigt som du konfigurerar disablesssd till true så att SQL Server använder OpenLDAP-anrop i stället för SSSD för anrop relaterade till služba Active Directory.
Note
SQL Server-inloggning med hjälp av ett FQDN (till exempel CONTOSO.COM\Username) stöds inte. Använd CONTOSO\Username-formatet.
SQL Server-inloggningar från lokala domängrupper stöds inte. Använd globala säkerhetsdomängrupper i stället.
Relaterat innehåll
- Kryptera anslutningar till SQL Server på Linux
- Förstå služba Active Directory-autentisering för SQL Server på Linux och containrar
- Felsöka služba Active Directory-autentisering för SQL Server på Linux och containrar
Bidra till SQL-dokumentation
Visste du att du kan redigera SQL-innehåll själv? Om du gör det hjälper du inte bara till att förbättra vår dokumentation, utan du får även kredit som deltagare på sidan.
Mer information finns i Redigera Microsoft Learn-dokumentation.