Självstudie: Konfigurera Active Directory-autentisering med SQL Server på Linux-containrar
gäller för:SQL Server – Linux
I den här självstudien beskrivs hur du konfigurerar SQL Server på Linux-containrar för att stödja Active Directory-autentisering, även kallat integrerad autentisering. En översikt finns i Active Directory-autentisering för SQL Server på Linux.
Not
Aktuell vägledning om nätverkskonfiguration finns i dokumentationen för ditt operativsystem (OS).
Den här självstudien består av följande uppgifter:
- Installera adutil
- Ansluta Linux-systemet till Active Directory-domänen
- Skapa en Active Directory-användare för SQL Server och ange tjänstens huvudnamn (SPN) med hjälp av verktyget adutil
- Skapa nyckelfliksfilen för SQL Server-tjänsten
- Skapa de
mssql.conf
- ochkrb5.conf
filer som ska användas av SQL Server-containern - Montera konfigurationsfilerna och distribuera SQL Server-containern
- Skapa Active Directory-baserade SQL Server-inloggningar med hjälp av Transact-SQL
- Ansluta till SQL Server med Hjälp av Active Directory-autentisering
Förutsättningar
Följande krävs innan du konfigurerar Active Directory-autentisering:
- Ha en Active Directory-domänkontrollant (Windows) i nätverket.
- Installera adutil på en Linux-värddator som är ansluten till en domän. Mer information finns i avsnittet Installera adutil.
Distribution och förberedelse av containrar
Om du vill konfigurera containern måste du i förväg veta vilken port som ska användas av containern på värden. Standardporten, 1433
, kan mappas på olika sätt på din kontainervärd. I den här självstudien kommer port 5433
på värden att mappas till port 1433
i containern. Mer information finns i vår snabbstart, Snabbstart: Kör SQL Server Linux-containeravbildningar med Docker.
När du registrerar tjänsthuvudnamn (SPN) kan du använda värdnamnet för datorn eller namnet på containern. Du bör dock konfigurera den enligt vad du vill se när du ansluter till containern externt.
Kontrollera att det finns en vidarebefordrande värdpost (A
) som har lagts till i Active Directory för Linux-värdens IP-adress och mappas till namnet på SQL Server-containern. I den här självstudien är IP-adressen för sql1
värddator 10.0.0.10
och mitt SQL Server-containernamn är sql1
. Lägg till posten vidarebefordrande värd i Active Directory, som du ser på skärmbilden. Inmatningen ser till att när användare ansluter till sql1.contoso.com
, så når de rätt värd.
I den här självstudien använder vi en miljö i Azure med tre virtuella datorer (VM). En virtuell dator som fungerar som Windows-domänkontrollant (DC), med domännamnet contoso.com
. Domänkontrollanten heter adVM.contoso.com
. Den andra datorn är en Windows-dator med namnet winbox
, som kör Windows 10 Desktop, som används som en klientruta och har SQL Server Management Studio (SSMS) installerat. Den tredje datorn är en Ubuntu 18.04 LTS-dator med namnet sql1
, som är värd för SQL Server-containrarna. Alla datorer är anslutna till contoso.com
domänen. För mer information, se Ansluta SQL Server på en Linux-värd till en Active Directory-domän.
Anteckning
Det är inte obligatoriskt att ansluta värdcontainerdatorn till domänen, vilket du kan se senare i den här artikeln.
Installera adutil
Om du vill installera adutilföljer du stegen i Introduktion till adutil – Active Directory-verktygpå en värddator som är ansluten till domänen.
Skapa Active Directory-användare, SPN:er och SQL Server-tjänstens keytab
Om du inte vill att containervärden ska vara en del av domänen och inte har följt stegen för att ansluta datorn till domänen bör du följa dessa steg på en annan Linux-dator som redan är en del av Active Directory-domänen:
Skapa en Active Directory-användare för SQL Server och ange SPN med hjälp av adutil.
Skapa och konfigurera nyckelfliksfilen för SQL Server-tjänsten.
Kopiera den mssql.keytab
fil som skapades till värddatorn som ska köra SQL Server-containern och konfigurera containern så att den använder den kopierade mssql.keytab
. Du kan också ansluta din Linux-värd som ska köra SQL Server-containern till Active Directory-domänen och följa dessa steg på samma dator.
Skapa Active Directory-användare för SQL Server och ange tjänstens huvudnamn med adutil
Om du aktiverar Active Directory-autentisering på SQL Server i Linux-containrar måste följande steg köras på en Linux-dator som ingår i Active Directory-domänen.
Hämta eller förnya Kerberos TGT (biljettbeviljande biljett) med hjälp av kommandot
kinit
. Använd ett privilegierat konto för kommandotkinit
. Kontot måste ha behörighet att ansluta till domänen och även kunna skapa konton och SPN i domänen.I det här exempelskriptet har en privilegierad användare med namnet
privilegeduser@CONTOSO.COM
redan skapats på domänkontrollanten.kinit privilegeduser@CONTOSO.COM
Med adutilskapar du den nya användare som ska användas som det privilegierade Active Directory-kontot av SQL Server. Ersätt
<password>
med ett giltigt lösenord.adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password '<password>'
Lösenord kan anges på något av följande tre sätt:
- Lösenordsflagga:
--password <password>
- Miljövariabler –
ADUTIL_ACCOUNT_PWD
- Interaktiva indata
Prioriteten för metoder för lösenordsinmatning följer ordningen på alternativen som anges ovan. De rekommenderade alternativen är att ange lösenordet med hjälp av miljövariabler eller interaktiva indata, eftersom de är säkrare jämfört med lösenordsflaggan.
Du kan ange namnet på kontot med det unika namnet (
-distname
) enligt ovan, eller så kan du även använda organisationsenhetens (OU) namn. Organisationsenhetens namn (--ou
) har företräde framför unikt namn om du anger båda. Du kan köra kommandot nedan för mer information:adutil user create --help
- Lösenordsflagga:
Registrera SPN:er till användaren som skapades ovan. Du kan använda värddatornamnet i stället för containernamnet om du vill, beroende på hur du vill att anslutningen ska se ut externt. I den här handledningen används port
5433
i stället för1433
. Det här är portmappningen för containern. Portnumret kan vara annorlunda.adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 5433
-
addauto
skapar SPN:erna automatiskt, förutsatt att tillräckliga privilegier finns för kinit--kontot. -
-n
: Namnet på kontot som SPN:erna tilldelas till. -
-s
: Tjänstnamnet som ska användas för att generera SPN. I det här fallet är det för SQL Server-tjänsten och därför är tjänstnamnet MSSQLSvc. -
-H
: Värdnamnet som ska användas för att generera SPN. Om inget anges kommer den lokala värdens FQDN att användas. Ange även FQDN för containernamnet. I det här fallet är containernamnetsql1
och det fullständiga domännamnet ärsql1.contoso.com
. -
-p
: Porten som ska användas för att generera SPN. Om det inte anges genereras SPN utan port. Anslutningar fungerar bara i det här fallet när SQL Server lyssnar på standardporten1433
.
-
Skapa nyckelfliksfil för SQL Server-tjänsten
Skapa keytab-filen som innehåller poster för varje av de fyra SPN som skapades tidigare och en för användaren. Keytab-filen monteras i containern så att den kan skapas på valfri plats på värdmaskinen. Du kan ändra den här sökvägen på ett säkert sätt så länge den resulterande nyckelfliken är korrekt monterad när du använder docker/podman för att distribuera containern.
Om du vill skapa nyckelfliken för alla SPN:er kan vi använda alternativet createauto
. Ersätt <password>
med ett giltigt lösenord.
adutil keytab createauto -k /container/sql1/secrets/mssql.keytab -p 5433 -H sql1.contoso.com --password '<password>' -s MSSQLSvc
-
-k
: Sökväg där du vill att filenmssql.keytab
ska skapas. I föregående exempel bör katalogen/container/sql1/secrets
redan finnas på värdmaskinen. -
-p
: Porten som ska användas för att generera SPN. Om det inte anges genereras SPN utan port. -
-H
: Värdnamnet som ska användas för att generera SPN. Om det inte anges används datorns FQDN. Ange även FQDN för containernamnet. I det här fallet är containernamnetsql1
och det fullständiga domännamnet ärsql1.contoso.com
. -
-s
: Tjänstnamnet som ska användas för att generera SPN. I det här fallet är det för SQL Server-tjänsten och därför är tjänstnamnet MSSQLSvc. -
--password
: Det här är lösenordet för det privilegierade Active Directory-användarkontot som skapades tidigare. -
-e
eller--enctype
: Krypteringstyper för nyckelfliksposten. Använd en kommaavgränsad lista med värden. Om det inte anges visas en interaktiv fråga.
När du har valt att välja krypteringstyper kan du välja fler än en. I det här exemplet valde vi aes256-cts-hmac-sha1-96
och arcfour-hmac
. Se till att du väljer en krypteringsmetod som stöds av värden och domänen.
Om du inte vill välja krypteringstyp interaktivt kan du ange val av krypteringstyp med argumentet -e i kommandot ovan. Om du vill ha mer hjälp med kommandona adutil kör du följande kommando.
adutil keytab createauto --help
Försiktighet
arcfour-hmac
är en svag kryptering och inte en rekommenderad krypteringstyp som ska användas i en produktionsmiljö.
Kommandot är följande för att skapa nyckelfliken för användaren. Ersätt <password>
med ett giltigt lösenord.
adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password '<password>'
-
-k
: Sökväg där du vill att filenmssql.keytab
ska skapas. I föregående exempel bör katalogen/container/sql1/secrets
redan finnas på värd. -
-p
: Huvudnamn som ska läggas till i keytab.
Den adutil- nyckelfliken create/autocreate skriver inte över de tidigare filerna. den lägger till i filen om den redan finns.
Se till att den skapade nyckelfliken har rätt behörigheter angivna när du distribuerar containern.
chmod 440 /container/sql1/secrets/mssql.keytab
Nu kan du kopiera mssql.keytab
från den aktuella Linux-värden till Linux-värden där du distribuerar SQL Server-containern och följa resten av stegen på Linux-värden som ska köra SQL Server-containern. Om ovanstående steg utfördes på samma Linux-värd där SQL Server-containrarna ska distribueras följer du även nästa steg på samma värd.
Skapa konfigurationsfiler som ska användas av SQL Server-containern
Skapa en
mssql.conf
fil med inställningarna för Active Directory. Den här filen kan skapas var som helst på värden och måste monteras korrekt under docker run-kommandot. I det här exemplet placerade vi den här filenmssql.conf
under/container/sql1
, som är vår containerkatalog. Innehållet imssql.conf
visas på följande sätt:[network] privilegedadaccount = sqluser kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab
-
privilegedadaccount
: Privilegierad Active Directory-användare som ska användas för Active Directory-autentisering. -
kerberoskeytabfile
: Sökvägen i containern därmssql.keytab
filen finns.
-
Skapa en
krb5.conf
fil, till exempel följande exempel. Höljet är viktigt i de här filerna.[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.COM
Kopiera alla filer,
mssql.conf
,krb5.conf
,mssql.keytab
till en plats som ska monteras på SQL Server-containern. I det här exemplet placeras dessa filer på värden på följande platser:mssql.conf
ochkrb5.conf
på/container/sql1/
.mssql.keytab
placeras på platsen/container/sql1/secrets/
.Kontrollera att det finns tillräckligt med behörighet för dessa mappar för användaren som kör kommandot docker/podman. När containern startar behöver användaren åtkomst till den mappsökväg som skapats. I det här exemplet har vi angett nedanstående behörigheter för mappsökvägen:
sudo chmod 755 /container/sql1/
Montera konfigurationsfiler och distribuera SQL Server-container
Kör SQL Server-containern och montera rätt Active Directory-konfigurationsfiler som skapades tidigare:
Viktig
Miljövariabeln SA_PASSWORD
är inaktuell. Använd MSSQL_SA_PASSWORD
i stället.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" \
-p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql \
-v /container/sql1/krb5.conf:/etc/krb5.conf \
-d mcr.microsoft.com/mssql/server:2019-latest
Försiktighet
Lösenordet bör följa SQL Server-standardprincipen för lösenord. 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.
När du kör containern på LSM (Linux Security Module) som SELinux-aktiverade värdar måste du montera volymerna med hjälp av alternativet Z
, vilket talar om för Docker att märka innehållet med en privat etikett som inte delas. Mer information finns i konfigurera SE Linux-etiketten.
Vårt exempel skulle innehålla följande kommandon. Ersätt <password>
med ett giltigt lösenord.
sudo docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 5433:1433 --name sql1 \
-v /container/sql1:/var/opt/mssql/ \
-v /container/sql1/krb5.conf:/etc/krb5.conf \
--dns-search contoso.com \
--dns 10.0.0.4 \
--add-host adVM.contoso.com:10.0.0.4 \
--add-host contoso.com:10.0.0.4 \
--add-host contoso:10.0.0.4 \
-d mcr.microsoft.com/mssql/server:2019-latest
- Filerna
mssql.conf
ochkrb5.conf
finns på värdfilsökvägen/container/sql1
. - Den
mssql.keytab
som skapades finns på sökvägen till värdfilen/container/sql1/secrets
. - Eftersom värddatorn finns i Azure måste Active Directory-informationen läggas till i kommandot
docker run
i samma ordning. I vårt exempel finns domänkontrollantenadVM
i domänencontoso.com
, med en IP-adress för10.0.0.4
. Domänkontrollanten kör DNS och KDC.
Skapa Active Directory-baserade SQL Server-inloggningar med hjälp av Transact-SQL
Anslut till SQL Server-containern. Med hjälp av följande kommandon skapar du inloggningen och bekräftar att den finns. Du kan köra det här kommandot från en klientdator (Windows eller Linux) som kör SSMS, Azure Data Studio eller något annat kommandoradsgränssnitt (CLI).
CREATE LOGIN [contoso\amvin]
FROM WINDOWS;
SELECT name
FROM sys.server_principals;
Ansluta till SQL Server med Active Directory-autentisering
Om du vill ansluta med SQL Server Management Studio (SSMS) eller Azure Data Studiologgar du in på SQL Server med Windows-autentiseringsuppgifter med SQL Server-namnet och portnumret (namnet kan vara containernamnet eller värdnamnet). I vårt exempel skulle servernamnet vara sql1.contoso.com,5433
.
Du kan också använda ett verktyg som sqlcmd för att ansluta till SQL Server i containern.
sqlcmd -E -S 'sql1.contoso.com,5433'
Resurser
- Förstå Active Directory-autentisering för SQL Server på Linux och containrar
- Felsöka Active Directory-autentisering för SQL Server på Linux och containrar