Delen via


Zelfstudie: Active Directory-verificatie gebruiken met SQL Server in Linux

van toepassing op:SQL Server- - Linux

In deze zelfstudie wordt uitgelegd hoe u SQL Server op Linux configureert ter ondersteuning van Active Directory-verificatie, ook wel geïntegreerde verificatie genoemd. Zie Active Directory-verificatie voor SQL Server op Linuxvoor een overzicht.

Deze zelfstudie bestaat uit de volgende taken:

  • SQL Server-host toevoegen aan Active Directory-domein
  • Active Directory-gebruiker maken voor SQL Server en SPN instellen
  • Keytab voor SQL Server-service configureren
  • Het keytab-bestand beveiligen
  • SQL Server configureren voor het gebruik van het keytab-bestand voor Kerberos-verificatie
  • Aanmeldingen op basis van Active Directory maken in Transact-SQL
  • Verbinding maken met SQL Server met behulp van Active Directory-verificatie

Voorwaarden

Voordat u Active Directory-verificatie configureert, moet u het volgende doen:

SQL Server-host toevoegen aan Active Directory-domein

Voeg uw SQL Server Linux-host toe met een Active Directory-domeincontroller. Zie SQL Server op een Linux-host toevoegen aan een Active Directory-domeinvoor meer informatie over het toevoegen van een Active Directory-domein.

Active Directory-gebruiker maken voor SQL Server en SPN instellen

Notitie

In de volgende stappen wordt uw FQDN (Fully Qualified Domain Name) gebruikt. Als u Azure gebruikt, moet u een FQDN maken voordat u verdergaat.

  1. Voer op uw domeincontroller de opdracht New-ADUser PowerShell uit om een nieuwe Active Directory-gebruiker te maken met een wachtwoord dat nooit verloopt. In het volgende voorbeeld wordt het account sqlsvcgenoemd, maar de accountnaam kan van alles zijn wat u wilt. U wordt gevraagd een nieuw wachtwoord voor het account in te voeren.

    Import-Module ActiveDirectory
    
    New-ADUser sqlsvc -AccountPassword (Read-Host -AsSecureString "Enter Password") -PasswordNeverExpires $true -Enabled $true
    

    Notitie

    Het is een best practice voor beveiliging om een toegewezen Active Directory-account voor SQL Server te hebben, zodat de referenties van het SQL Server-exemplaar niet worden gedeeld met andere services die hetzelfde account gebruiken. U kunt echter desgewenst een bestaand Active Directory-account opnieuw gebruiken als u het wachtwoord van het account kent (dat nodig is om een keytab-bestand te genereren in de volgende stap). Daarnaast moet het account zijn ingeschakeld voor ondersteuning van 128-bits en 256-bits Kerberos AES-versleuteling (msDS-SupportedEncryptionTypes kenmerk) voor het gebruikersaccount. Als u wilt controleren of het account is ingeschakeld voor AES-versleuteling, zoekt u het account in hulpprogramma Active Directory: gebruikers en computers en selecteert u eigenschappen. Zoek het tabblad Accounts in Eigenschappenen controleer of de twee volgende selectievakjes zijn geselecteerd.

    1. Dit account ondersteunt Kerberos AES 128-bits versleuteling

    2. Dit account ondersteunt Kerberos AES 256-bits versleuteling

  2. Stel de ServicePrincipalName (SPN) in voor dit account met behulp van het hulpprogramma setspn.exe. De SPN moet exact worden opgemaakt zoals opgegeven in het volgende voorbeeld. U vindt de volledig gekwalificeerde domeinnaam van de SQL Server-hostmachine door hostname --all-fqdns uit te voeren op de SQL Server-host. De TCP-poort moet 1433 zijn, tenzij u SQL Server hebt geconfigureerd voor het gebruik van een ander poortnummer.

    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
    

    Notitie

    Als u een foutmelding krijgt, Insufficient access rights, neem dan contact op met uw domeinbeheerder dat u over voldoende machtigingen beschikt om een SPN in te stellen voor dit account. Het account dat wordt gebruikt om een SPN te registreren, heeft de Write servicePrincipalName machtigingen nodig. Zie Een service-principalnaam registreren voor Kerberos-verbindingenvoor meer informatie.

    Als u de TCP-poort in de toekomst wijzigt, moet u de opdracht setspn opnieuw uitvoeren met het nieuwe poortnummer. U moet ook de nieuwe SPN toevoegen aan de keytab van de SQL Server-service door de stappen in de volgende sectie te volgen.

Zie Een service-principalnaam registreren voor Kerberos-verbindingenvoor meer informatie.

SQL Server-service keytab configureren

Voor het configureren van Active Directory-verificatie voor SQL Server op Linux is een Active Directory-gebruikersaccount en de SPN vereist die in de vorige sectie is gemaakt.

Belangrijk

Als het wachtwoord voor het Active Directory-account wordt gewijzigd of het wachtwoord voor het account waaraan de SPN's zijn toegewezen, moet u de keytab bijwerken met het nieuwe wachtwoord en het sleutelversienummer (KVNO). Sommige services kunnen de wachtwoorden ook automatisch roteren. Controleer eventuele beleidsregels voor wachtwoordrotatie voor de betreffende accounts en stem deze af met geplande onderhoudsactiviteiten om onverwachte downtime te voorkomen.

SPN keytab-vermeldingen

  1. Controleer het sleutelversienummer (KVNO) voor het Active Directory-account dat u in de vorige stap hebt gemaakt. Meestal is dit 2, maar het kan een ander geheel getal zijn als u het wachtwoord van het account meerdere keren hebt gewijzigd. Voer op de SQL Server-hostcomputer de volgende opdrachten uit:

    • In de onderstaande voorbeelden wordt ervan uitgegaan dat de user zich in het @CONTOSO.COM domein bevindt. Wijzig de gebruikersnaam en domeinnaam naar uw gebruikersnaam en domeinnaam.
    kinit user@CONTOSO.COM
    kvno user@CONTOSO.COM
    kvno MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM
    

    Notitie

    Het kan enkele minuten duren voordat SPN's via uw domein worden doorgegeven, met name als het domein groot is. Als u de fout krijgt, kvno: Server not found in Kerberos database while getting credentials for MSSQLSvc/<fully qualified domain name of host machine>:<tcp port>@CONTOSO.COM, wacht u enkele minuten en probeert u het opnieuw. De vorige opdrachten werken alleen als de server is toegevoegd aan een Active Directory-domein, dat in een eerdere sectie is behandeld.

  2. Als u ktpassgebruikt, voegt u keytabvermeldingen toe voor elke SPN met behulp van de volgende opdrachten op een Windows-computeropdrachtprompt:

    • <DomainName>\<UserName> - Active Directory-gebruikersaccount
    • @CONTOSO.COM - Uw domeinnaam gebruiken
    • /kvno <#> - Vervang <#> door de KVNO die u in een eerdere stap hebt verkregen
    • <password>: Uw wachtwoord moet voldoen aan het standaard wachtwoordbeleid van SQL Server . 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.
    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 vorige opdrachten staan zowel AES- als RC4-versleutelingscoderingen toe voor Active Directory-verificatie. RC4 is een oudere versleutelingscodering en als een hogere mate van beveiliging is vereist, kunt u ervoor kiezen om de sleuteltabvermeldingen te maken met alleen de AES-versleutelingscodering.

    Notitie

    De laatste twee UserName vermeldingen moeten in kleine letters staan of de machtigingsverificatie kan mislukken.

  3. Nadat u de vorige opdrachten hebt uitgevoerd, moet u een keytab-bestand hebben met de naam mssql.keytab. Kopieer het bestand naar de SQL Server-machine onder de map /var/opt/mssql/secrets.

  4. Beveilig het keytab-bestand.

    Iedereen met toegang tot dit keytab-bestand kan SQL Server in het domein imiteren, dus zorg ervoor dat u de toegang tot het bestand beperkt zodat alleen het mssql-account leestoegang heeft:

    sudo chown mssql:mssql /var/opt/mssql/secrets/mssql.keytab
    sudo chmod 400 /var/opt/mssql/secrets/mssql.keytab
    
  5. De volgende configuratieoptie moet worden ingesteld met het hulpprogramma mssql-conf om het account op te geven dat moet worden gebruikt tijdens het openen van het keytab-bestand.

    sudo mssql-conf set network.privilegedadaccount <username>
    

    Notitie

    Neem alleen de gebruikersnaam op en niet de domeinnaam\gebruikersnaam of username@domain. SQL Server voegt indien nodig de domeinnaam intern toe aan deze gebruikersnaam wanneer deze wordt gebruikt.

  6. Gebruik de volgende stappen om SQL Server te configureren om het keytab-bestand voor Kerberos-verificatie te gebruiken.

    sudo mssql-conf set network.kerberoskeytabfile /var/opt/mssql/secrets/mssql.keytab
    sudo systemctl restart mssql-server
    

    U kunt eventueel UDP-verbindingen met de domeincontroller uitschakelen om de prestaties te verbeteren. In veel gevallen mislukken UDP-verbindingen consistent wanneer u verbinding maakt met een domeincontroller, zodat u configuratieopties kunt instellen in /etc/krb5.conf om UDP-aanroepen over te slaan. Bewerk /etc/krb5.conf en stel de volgende opties in:

    /etc/krb5.conf
    [libdefaults]
    udp_preference_limit=0
    

Op dit moment kunt u aanmeldingen op basis van Active Directory gebruiken in SQL Server.

Aanmeldingen op basis van Active Directory maken in Transact-SQL

  1. Maak verbinding met SQL Server en maak een nieuwe, op Active Directory gebaseerde aanmelding:

    CREATE LOGIN [CONTOSO\user]
        FROM WINDOWS;
    
  2. Controleer of de aanmelding nu wordt vermeld in de sys.server_principals systeemcatalogusweergave:

    SELECT name
    FROM sys.server_principals;
    

Verbinding maken met SQL Server met behulp van Active Directory-verificatie

Meld u aan bij een clientcomputer met uw domeinreferenties. U kunt nu verbinding maken met SQL Server zonder uw wachtwoord opnieuw in te voeren met behulp van Active Directory-verificatie. Als u een aanmelding voor een Active Directory-groep maakt, kan elke Active Directory-gebruiker die lid is van die groep op dezelfde manier verbinding maken.

De specifieke verbindingsreeksparameter voor clients voor het gebruik van Active Directory-verificatie is afhankelijk van het stuurprogramma dat u gebruikt. Bekijk de voorbeelden in de volgende secties.

sqlcmd op een linux-client die lid is van een domein

Meld u aan bij een Linux-client die lid is van een domein met behulp van ssh- en uw domeinreferenties:

ssh -l user@contoso.com client.contoso.com

Zorg ervoor dat u het mssql-tools-pakket hebt geïnstalleerd en maak vervolgens verbinding met sqlcmd- zonder referenties op te geven:

sqlcmd -S mssql-host.contoso.com

Anders dan SQL Windows werkt Kerberos-verificatie voor lokale verbinding in SQL Linux. U moet echter nog steeds de FQDN van de SQL Linux-host opgeven en Active Directory-verificatie werkt niet als u verbinding probeert te maken met ., localhost, 127.0.0.1, enzovoort.

SSMS op een Windows-client die lid is van een domein

Meld u aan bij een Windows-client die lid is van een domein met uw domeinreferenties. Zorg ervoor dat SQL Server Management Studio is geïnstalleerd en maak vervolgens verbinding met uw SQL Server-exemplaar (bijvoorbeeld mssql-host.contoso.com) door Windows-verificatie op te geven in het dialoogvenster Verbinding maken met Server.

Active Directory-verificatie met andere clientstuurprogramma's

In de volgende tabel worden aanbevelingen voor andere clientstuurprogramma's beschreven:

Clientstuurprogramma Aanbeveling
JDBC Gebruik geïntegreerde Kerberos-verificatie om VERBINDING te maken met SQL Server.
ODBC Geïntegreerde verificatie gebruiken.
ADO.NET Syntaxis van verbindingstekenreeks.

Aanvullende configuratieopties

Als u hulpprogramma's van derden gebruikt, zoals PBIS-, VASof Centrify- om de Linux-host toe te voegen aan een Active Directory-domein en u wilt dat SQL Server de OpenLDAP-bibliotheek rechtstreeks gebruikt, kunt u de disablesssd-optie als volgt configureren met mssql-conf-:

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

Notitie

Er zijn hulpprogramma's zoals realmd die SSSD instellen, terwijl andere hulpprogramma's zoals PBIS, VAS en Centrify geen SSSD instellen. Als het hulpprogramma dat wordt gebruikt om aan te sluiten bij het Active Directory-domein niet SSSD configureert, moet u de optie disablesssd configureren naar true. Hoewel het niet vereist is omdat SQL Server probeert SSSD voor Active Directory te gebruiken voordat u terugvalt op het OpenLDAP-mechanisme, is het beter om het te configureren, zodat SQL Server OpenLDAP-aanroepen rechtstreeks omzeilt het SSSD-mechanisme.

Als uw domeincontroller LDAPS ondersteunt, kunt u afdwingen dat alle verbindingen van SQL Server naar de domeincontrollers worden overschreden via LDAPS. Als u wilt controleren of de client contact kan opnemen met de domeincontroller via LDAPS, voert u de volgende bash-opdracht uit, ldapsearch -H ldaps://contoso.com:3269. Als u SQL Server wilt instellen om alleen LDAPS te gebruiken, voert u het volgende uit:

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

Hiermee wordt LDAPS via SSSD gebruikt als Active Directory-domeindeelname op de host is uitgevoerd via het SSSD-pakket en disablesssd niet is ingesteld op true. Wanneer disablesssd is ingesteld op waar en forcesecureldap eveneens op waar is ingesteld, dan zal het LDAPS-protocol worden gebruikt via OpenLDAP-bibliotheekaanroepen die door SQL Server worden uitgevoerd.

Post SQL Server 2017 CU 14

Vanaf SQL Server 2017 (14.x) CU 14, als SQL Server is toegevoegd aan een Active Directory-domeincontroller met behulp van externe providers en is geconfigureerd om OpenLDAP-aanroepen te gebruiken voor algemene Active Directory-opzoekingen door disablesssd op 'waar' in te stellen, kunt u ook de enablekdcfromkrb5-optie gebruiken om SQL Server te dwingen de krb5-bibliotheek te gebruiken voor KDC-opzoekingen in plaats van omgekeerde DNS-opzoekingen voor de KDC-server.

Dit kan handig zijn voor het scenario waarin u handmatig de domeincontrollers wilt configureren waarmee SQL Server probeert te communiceren. En u gebruikt het OpenLDAP-bibliotheekmechanisme met behulp van de KDC-lijst in krb5.conf.

Stel eerst disablesssd en enablekdcfromkrb5conf in op true en start vervolgens SQL Server opnieuw op.

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

Configureer vervolgens de KDC-lijst in /etc/krb5.conf als volgt:

[realms]
CONTOSO.COM = {
  kdc = dcWithGC1.contoso.com
  kdc = dcWithGC2.contoso.com
}

Hoewel het niet wordt aanbevolen, is het mogelijk om hulpprogramma's te gebruiken, zoals realmd, die SSSD instellen tijdens het toevoegen van de Linux-host aan het domein, terwijl u disablesssd configureert zodat SQL Server OpenLDAP-aanroepen gebruikt in plaats van SSSD voor aan Active Directory gerelateerde aanroepen.

Notitie

Sql Server-aanmelding met behulp van een FQDN (bijvoorbeeld CONTOSO.COM\Username) wordt niet ondersteund. Gebruik de CONTOSO\Username-indeling.

SQL Server-aanmeldingen van lokale domeingroepen worden niet ondersteund. Gebruik in plaats daarvan globale beveiligingsdomeingroepen.

Bijdragen aan SQL-documentatie

Wist u dat u zelf SQL-inhoud kunt bewerken? Als u dit doet, helpt u niet alleen onze documentatie te verbeteren, maar wordt u ook als bijdrager aan de pagina erkend.

Zie Bijdragen aan sql Server-documentatie voor meer informatie