Dela via


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- och krb5.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.10och 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.

Skärmbild av att lägga till en värdpostering.

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:

  1. Skapa en Active Directory-användare för SQL Server och ange SPN med hjälp av adutil.

  2. 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.

  1. Hämta eller förnya Kerberos TGT (biljettbeviljande biljett) med hjälp av kommandot kinit. Använd ett privilegierat konto för kommandot kinit. 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
    
  2. 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
    
  3. 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ör 1433. 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 containernamnet sql1 och det fullständiga domännamnet är sql1.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å standardporten 1433.

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 filen mssql.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 containernamnet sql1 och det fullständiga domännamnet är sql1.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 filen mssql.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

  1. 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 filen mssql.conf under /container/sql1, som är vår containerkatalog. Innehållet i mssql.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är mssql.keytab filen finns.
  2. 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
    
  3. 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 och krb5.conf/container/sql1/. mssql.keytab placeras på platsen /container/sql1/secrets/.

  4. 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 och krb5.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änkontrollanten adVM i domänen contoso.com, med en IP-adress för 10.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