Zelfstudie: Active Directory-verificatie configureren met SQL Server in Linux-containers
van toepassing op:SQL Server- - Linux
In deze zelfstudie wordt uitgelegd hoe u SQL Server op Linux-containers configureert ter ondersteuning van Active Directory-verificatie, ook wel geïntegreerde verificatie genoemd. Zie Active Directory-verificatie voor SQL Server op Linuxvoor een overzicht.
Notitie
Raadpleeg de documentatie voor uw besturingssysteem (OS) voor actuele richtlijnen over netwerkconfiguratie.
Deze zelfstudie bestaat uit de volgende taken:
- adutil- installeren
- Linux-host toevoegen aan Active Directory-domein
- Maak een Active Directory-gebruiker voor SQL Server en stel de SPN (Service Principal Name) in met behulp van het hulpprogramma adutil
- Het keytabbestand van de SQL Server-service maken
- Maak de
mssql.conf
- enkrb5.conf
-bestanden die moeten worden gebruikt door de SQL Server-container - De configuratiebestanden koppelen en de SQL Server-container implementeren
- Op Active Directory gebaseerde SQL Server-aanmeldingen maken met behulp van Transact-SQL
- Verbinding maken met SQL Server met behulp van Active Directory-verificatie
Voorwaarden
Het volgende is vereist voordat u Active Directory-verificatie configureert:
- Een Active Directory-domeincontroller (Windows) in uw netwerk hebben.
- Installeer adutil op een Linux-hostcomputer, die lid is van een domein. Volg de sectie Adutil installeren voor meer informatie.
Containerimplementatie en -voorbereiding
Als u uw container wilt instellen, moet u vooraf weten welke poort wordt gebruikt door de container op de host. De standaardpoort, 1433
, kan anders worden toegewezen op uw containerhost. Voor deze zelfstudie wordt poort 5433
op de host toegewezen aan poort 1433
van de container. Zie de quickstart Quickstart: SQL Server Linux-containerinstallatiekopieën uitvoeren met Dockervoor meer informatie.
Wanneer u Service Principal Names (SPN) registreert, kunt u de hostnaam van de computer of de naam van de container gebruiken. U moet deze echter configureren op basis van wat u wilt zien wanneer u extern verbinding maakt met de container.
Zorg ervoor dat er een doorstuurhost (A
) is toegevoegd in Active Directory voor het IP-adres van de Linux-host, waarbij de toewijzing wordt toegewezen aan de naam van de SQL Server-container. In deze zelfstudie is het IP-adres van de hostmachine sql1
10.0.0.10
, en de naam van mijn SQL Server-container is sql1
. Voeg de doorstuurhostvermelding toe in Active Directory, zoals wordt weergegeven in de schermopname. De vermelding zorgt ervoor dat wanneer gebruikers verbinding maken met sql1.contoso.com
, deze de juiste host bereikt.
Voor deze zelfstudie gebruiken we een omgeving in Azure met drie virtuele machines (VM's). Eén VIRTUELE machine die fungeert als de Windows-domeincontroller (DC), met de domeinnaam contoso.com
. De domeincontroller heeft de naam adVM.contoso.com
. De tweede computer is een Windows-computer met de naam winbox
, waarop Windows 10-desktop wordt uitgevoerd. Deze wordt gebruikt als een clientcomputer en heeft SQL Server Management Studio (SSMS) geïnstalleerd. De derde machine is een Ubuntu 18.04 LTS-computer met de naam sql1
, die als host fungeert voor de SQL Server-containers. Alle machines worden gekoppeld aan het contoso.com
domein. Zie SQL Server op een Linux-host toevoegen aan een Active Directory-domeinvoor meer informatie.
Notitie
Het toevoegen van de hostcontainermachine aan het domein is niet verplicht, zoals u verderop in dit artikel kunt zien.
Adutil installeren
Als u adutilwilt installeren, volgt u de stappen in Inleiding tot adutil - Active Directory-hulpprogramma, op een hostcomputer die is toegevoegd aan het domein.
Maak Active Directory-gebruiker, SPN's en SQL Server-service-sleuteltab aan
Als u niet wilt dat de containerhost deel uitmaakt van het domein en u niet de stappen hebt gevolgd om de machine aan het domein toe te voegen, moet u deze stappen uitvoeren op een andere Linux-computer die al deel uitmaakt van het Active Directory-domein:
Maak een Active Directory-gebruiker voor SQL Server en stel de SPN in met behulp van adutil.
Maak en configureer het keytabbestand van de SQL Server-service.
Kopieer het mssql.keytab
-bestand dat is gemaakt op de hostcomputer waarop de SQL Server-container wordt uitgevoerd en configureer de container voor het gebruik van de gekopieerde mssql.keytab
. U kunt eventueel ook uw Linux-host toevoegen waarmee de SQL Server-container wordt uitgevoerd naar het Active Directory-domein en deze stappen op dezelfde computer uitvoeren.
Active Directory-gebruiker maken voor SQL Server en service-principal-naam instellen met adutil
Voor het inschakelen van Active Directory-verificatie op SQL Server in Linux-containers moeten de volgende stappen worden uitgevoerd op een Linux-computer die deel uitmaakt van het Active Directory-domein.
Verkrijg of vernieuw de Kerberos TGT (ticket-granting ticket) met behulp van de opdracht
kinit
. Gebruik een bevoegd account voor de opdrachtkinit
. Het account moet gemachtigd zijn om verbinding te maken met het domein en moet ook accounts en SPN's in het domein kunnen maken.In dit voorbeeldscript is er al een bevoegde gebruiker met de naam
privilegeduser@CONTOSO.COM
gemaakt op de domeincontroller.kinit privilegeduser@CONTOSO.COM
Maak met behulp van adutilde nieuwe gebruiker die wordt gebruikt als het bevoegde Active Directory-account door SQL Server. Vervang
<password>
door een geldig wachtwoord.adutil user create --name sqluser --distname CN=sqluser,CN=Users,DC=CONTOSO,DC=COM --password '<password>'
Wachtwoorden kunnen op drie manieren worden opgegeven:
- Wachtwoordvlag:
--password <password>
- Omgevingsvariabelen -
ADUTIL_ACCOUNT_PWD
- Interactieve invoer
De prioriteit van wachtwoordinvoermethoden volgt de volgorde van de bovenstaande opties. De aanbevolen opties zijn om het wachtwoord op te geven met behulp van omgevingsvariabelen of interactieve invoer, omdat ze veiliger zijn in vergelijking met de wachtwoordvlag.
U kunt de naam van het account opgeven met behulp van de distinguished name (DN) (
-distname
) zoals hierboven getoond of u kunt ook de naam van de Organisatorische Eenheid (OE) gebruiken. De OE-naam (--ou
) heeft voorrang op de onderscheidende naam in het geval dat u beide opgeeft. U kunt de onderstaande opdracht uitvoeren voor meer informatie:adutil user create --help
- Wachtwoordvlag:
Registreer SPN's bij de gebruiker die hierboven is gemaakt. U kunt desgewenst de naam van de hostcomputer gebruiken in plaats van de containernaam, afhankelijk van de manier waarop u de verbinding extern wilt laten zien. In deze zelfstudie wordt poort
5433
gebruikt in plaats van1433
. Dit is de poorttoewijzing voor de container. Uw poortnummer kan afwijken.adutil spn addauto -n sqluser -s MSSQLSvc -H sql1.contoso.com -p 5433
-
addauto
maakt automatisch de SPN's, mits er voldoende bevoegdheden aanwezig zijn voor het kinit--account. -
-n
: de naam van het account waaraan de SPN's worden toegewezen. -
-s
: de servicenaam die moet worden gebruikt voor het genereren van SPN's. In dit geval is dit voor de SQL Server-service en daarom is de servicenaam MSSQLSvc. -
-H
: de hostnaam die moet worden gebruikt voor het genereren van SPN's. Als dit niet is opgegeven, wordt de FQDN van de lokale host gebruikt. Geef ook de FQDN op voor de containernaam. In dit geval is de containernaamsql1
en is de FQDNsql1.contoso.com
. -
-p
: de poort die moet worden gebruikt voor het genereren van SPN's. Als dit niet is opgegeven, worden SPN's zonder poort gegenereerd. Verbindingen werken alleen in dit geval wanneer de SQL Server luistert naar de standaardpoort,1433
.
-
Keytabbestand voor SQL Server-service maken
Maak het keytab-bestand met vermeldingen voor elk van de vier SPN's die u eerder hebt gemaakt en één voor de gebruiker. Het keytab-bestand wordt gekoppeld aan de container, zodat het kan worden gemaakt op elke locatie op de host. U kunt dit pad veilig wijzigen, zolang de resulterende keytab correct is gekoppeld wanneer u docker/podman gebruikt om de container te implementeren.
Als u de keytab voor alle SPN's wilt maken, kunt u de optie createauto
gebruiken. Vervang <password>
door een geldig wachtwoord.
adutil keytab createauto -k /container/sql1/secrets/mssql.keytab -p 5433 -H sql1.contoso.com --password '<password>' -s MSSQLSvc
-
-k
: Pad waar u hetmssql.keytab
-bestand wilt maken. In het vorige voorbeeld moet de map/container/sql1/secrets
al aanwezig zijn op de host. -
-p
: de poort die moet worden gebruikt voor het genereren van SPN's. Als dit niet is opgegeven, worden SPN's zonder poort gegenereerd. -
-H
: de hostnaam die moet worden gebruikt voor het genereren van SPN's. Als dit niet is opgegeven, wordt de FQDN van de lokale host gebruikt. Geef ook de FQDN op voor de containernaam. In dit geval is de containernaamsql1
en is de FQDNsql1.contoso.com
. -
-s
: de servicenaam die moet worden gebruikt voor het genereren van SPN's. In dit geval is dit voor de SQL Server-service en daarom is de servicenaam MSSQLSvc. -
--password
: dit is het wachtwoord van het bevoegde Active Directory-gebruikersaccount dat eerder is gemaakt. -
-e
of--enctype
: versleutelingstypen voor de keytabvermelding. Gebruik een door komma's gescheiden lijst met waarden. Als dit niet is opgegeven, wordt er een interactieve prompt weergegeven.
Wanneer u een keuze hebt om de versleutelingstypen te kiezen, kunt u meer dan één kiezen. Voor dit voorbeeld hebben we gekozen voor aes256-cts-hmac-sha1-96
en arcfour-hmac
. Zorg ervoor dat u een versleutelingstype kiest dat wordt ondersteund door de host en het domein.
Als u niet-interactief het versleutelingstype wilt kiezen, kunt u uw keuze van het versleutelingstype opgeven met het argument -e in de bovenstaande opdracht. Voer de volgende opdracht uit voor aanvullende hulp bij de adutil opdrachten.
adutil keytab createauto --help
Voorzichtigheid
arcfour-hmac
is een zwakke versleuteling en niet een aanbevolen versleutelingstype dat moet worden gebruikt in een productieomgeving.
Als u de keytab voor de gebruiker wilt maken, is de opdracht als volgt. Vervang <password>
door een geldig wachtwoord.
adutil keytab create -k /container/sql1/secrets/mssql.keytab -p sqluser --password '<password>'
-
-k
: Pad waar u hetmssql.keytab
-bestand wilt maken. In het vorige voorbeeld moet de map/container/sql1/secrets
al aanwezig zijn op de host. -
-p
: Principal die moet worden toegevoegd aan de keytab.
De adutil keytab maken/automatisch maken overschrijft de vorige bestanden niet; het wordt toegevoegd aan het bestand als deze al aanwezig is.
Zorg ervoor dat voor de gemaakte sleuteltab de juiste machtigingen zijn ingesteld bij het implementeren van de container.
chmod 440 /container/sql1/secrets/mssql.keytab
Op dit moment kunt u mssql.keytab
van de huidige Linux-host kopiëren naar de Linux-host waar u de SQL Server-container zou implementeren en de rest van de stappen op de Linux-host volgen waarop de SQL Server-container wordt uitgevoerd. Als de bovenstaande stappen zijn uitgevoerd op dezelfde Linux-host waar de SQL Server-containers worden geïmplementeerd, volgt u de volgende stappen en op dezelfde host.
Configuratiebestanden maken die moeten worden gebruikt door de SQL Server-container
Maak een
mssql.conf
-bestand met de instellingen voor Active Directory. Dit bestand kan overal op de host worden gemaakt en moet correct worden gekoppeld tijdens de docker-opdracht. In dit voorbeeld hebben we dit bestandmssql.conf
onder/container/sql1
geplaatst. Dit is de containermap. De inhoud van demssql.conf
wordt als volgt weergegeven:[network] privilegedadaccount = sqluser kerberoskeytabfile = /var/opt/mssql/secrets/mssql.keytab
-
privilegedadaccount
: bevoegde Active Directory-gebruiker die moet worden gebruikt voor Active Directory-verificatie. -
kerberoskeytabfile
: het pad in de container waar hetmssql.keytab
-bestand zich bevindt.
-
Maak een
krb5.conf
-bestand, zoals in het volgende voorbeeld. De behuizing is van belang in deze bestanden.[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
Kopieer alle bestanden,
mssql.conf
,krb5.conf
,mssql.keytab
naar een locatie die wordt gekoppeld aan de SQL Server-container. In dit voorbeeld worden deze bestanden op de host op de volgende locaties geplaatst:mssql.conf
enkrb5.conf
op/container/sql1/
.mssql.keytab
wordt op de locatie/container/sql1/secrets/
geplaatst.Zorg ervoor dat er voldoende machtigingen zijn voor deze mappen voor de gebruiker die de opdracht docker/podman uitvoert. Wanneer de container wordt gestart, moet de gebruiker toegang hebben tot het mappad dat is gemaakt. In dit voorbeeld hebben we de onderstaande machtigingen opgegeven voor het mappad:
sudo chmod 755 /container/sql1/
Configuratiebestanden koppelen en SQL Server-container implementeren
Voer uw SQL Server-container uit en koppel de juiste Active Directory-configuratiebestanden die eerder zijn gemaakt:
Belangrijk
De omgevingsvariabele SA_PASSWORD
is afgeschaft. Gebruik in plaats daarvan MSSQL_SA_PASSWORD
.
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
Voorzichtigheid
Uw wachtwoord moet voldoen aan het standaard SQL Server wachtwoordbeleid. Standaard moet het wachtwoord ten minste acht tekens lang zijn en tekens bevatten uit drie van de volgende vier sets: hoofdletters, kleine letters, basis-10 cijfers en symbolen. Wachtwoorden mogen maximaal 128 tekens lang zijn. Gebruik wachtwoorden die zo lang en complex mogelijk zijn.
Wanneer u een container uitvoert op LSM (Linux Security Module), zoals hosts waarvoor SELinux is ingeschakeld, moet u de volumes koppelen met behulp van de optie Z
, waardoor docker de inhoud moet labelen met een persoonlijk niet-gedeeld label. Zie het SE Linux-label configurerenvoor meer informatie.
Ons voorbeeld bevat de volgende opdrachten. Vervang <password>
door een geldig wachtwoord.
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
- De bestanden
mssql.conf
enkrb5.conf
bevinden zich op het hostbestandspad/container/sql1
. - De
mssql.keytab
die is gemaakt, bevindt zich op het hostbestands-pad/container/sql1/secrets
. - Omdat onze hostcomputer zich in Azure bevindt, moeten de Active Directory-gegevens in dezelfde volgorde worden toegevoegd aan de opdracht
docker run
. In ons voorbeeld bevindt de domeincontrolleradVM
zich in het domeincontoso.com
, met een IP-adres van10.0.0.4
. De domeincontroller voert DNS en KDC uit.
Op Active Directory gebaseerde SQL Server-aanmeldingen maken met behulp van Transact-SQL
Maak verbinding met de SQL Server-container. Gebruik de volgende opdrachten om de aanmelding te maken en te bevestigen dat deze bestaat. U kunt deze opdracht uitvoeren vanaf een clientcomputer (Windows of Linux) met SSMS, Azure Data Studio of een ander cli-hulpprogramma (opdrachtregelinterface).
CREATE LOGIN [contoso\amvin]
FROM WINDOWS;
SELECT name
FROM sys.server_principals;
Verbinding maken met SQL Server met Active Directory-verificatie
Als u verbinding wilt maken met behulp van SQL Server Management Studio (SSMS) of Azure Data Studio, meldt u zich aan bij de SQL Server met Windows-referenties met behulp van de SQL Server-naam en het poortnummer (de naam kan de containernaam of de hostnaam zijn). In ons voorbeeld is de servernaam sql1.contoso.com,5433
.
U kunt ook een hulpprogramma zoals sqlcmd gebruiken om verbinding te maken met de SQL Server in uw container.
sqlcmd -E -S 'sql1.contoso.com,5433'
Middelen
- Inzicht in Active Directory-verificatie voor SQL Server in Linux en containers
- Problemen met Active Directory-verificatie oplossen voor SQL Server in Linux en containers