Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
              van toepassing op:SQL Server- - Linux
SQL Server 2017-containers (14.x) worden standaard gestart als hoofdgebruiker, wat enkele beveiligingsproblemen kan veroorzaken. Dit artikel bevat informatie over beveiligingsopties die u hebt bij het uitvoeren van SQL Server Linux-containers en het bouwen van een SQL Server-container als een niet-hoofdgebruiker.
In de voorbeelden in dit artikel wordt ervan uitgegaan dat u Docker gebruikt, maar u kunt dezelfde principes toepassen op andere hulpprogramma's voor containerindeling, waaronder Kubernetes.
Niet-hoofd-SQL Server 2017-containers bouwen en uitvoeren
Volg deze stappen om een SQL Server 2017-container (14.x) te bouwen die wordt gestart als de mssql (niet-hoofdgebruiker).
Notitie
Containers voor SQL Server 2019 (15.x) en latere versies worden automatisch gestart als niet-hoofdmap, terwijl SQL Server 2017-containers (14.x) standaard als hoofdmap worden gestart. Zie Beveiligde SQL Server Linux-containersvoor meer informatie over het uitvoeren van SQL Server-containers als niet-hoofdcontainers.
Download het Dockerfile-voorbeeldbestand voor niet-hoofd-SQL Server-containers en sla het bestand op als
dockerfile.Voer de volgende opdracht uit in de context van de dockerfile-map om de niet-hoofd-SQL Server-container te bouwen:
cd <path to dockerfile> docker build -t 2017-latest-non-root .Start de container.
Belangrijk
De omgevingsvariabele
SA_PASSWORDis afgeschaft. Gebruik in plaats daarvanMSSQL_SA_PASSWORD.docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE --name sql1 -p 1433:1433 -d 2017-latest-non-rootNotitie
De vlag
--cap-add SYS_PTRACEis vereist voor niet-root SQL Server-containers om dumps te genereren voor probleemoplossingsdoeleinden.Controleer of de container wordt uitgevoerd als niet-hoofdgebruiker:
docker exec -it sql1 bashVoer
whoamiuit, wat de gebruiker die binnen de container draait teruggeeft.whoami
Container uitvoeren als een andere niet-hoofdgebruiker op de host
Als u de SQL Server-container wilt uitvoeren als een andere niet-hoofdgebruiker, voegt u de -u vlag toe aan de opdracht docker run. De niet-rootcontainer heeft de beperking dat deze moet draaien als onderdeel van de root groep, tenzij een volume is gemonteerd op /var/opt/mssql waartoe de niet-rootgebruiker toegang heeft. De root groep verleent geen extra hoofdmachtigingen aan de niet-hoofdgebruiker.
Als gebruiker uitvoeren met een UID 4000
U kunt SQL Server starten met een aangepaste UID. Met de volgende opdracht start u bijvoorbeeld SQL Server met UID 4000:
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE -u 4000:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
Waarschuwing
Zorg ervoor dat de SQL Server-container een benoemde gebruiker heeft, zoals mssql of root, anders kan sqlcmd niet worden uitgevoerd in de container. U kunt controleren of de SQL Server-container wordt uitgevoerd als een benoemde gebruiker door whoami in de container uit te voeren.
Voer de niet-rootcontainer uit als root-gebruiker.
U kunt de niet-hoofdcontainer indien nodig uitvoeren als hoofdgebruiker, waarmee ook alle bestandsmachtigingen automatisch aan de container worden verleend, omdat deze een hogere bevoegdheid heeft.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -u 0:0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
Als gebruiker uitvoeren op uw hostcomputer
U kunt SQL Server starten met een bestaande gebruiker op de hostcomputer met de volgende opdracht:
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE -u $(id -u myusername):0 -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
Als een andere gebruiker en groep uitvoeren
U kunt SQL Server starten met een aangepaste gebruiker en groep. In dit voorbeeld heeft het gekoppelde volume machtigingen geconfigureerd voor de gebruiker of groep op de hostcomputer.
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" --cap-add SYS_PTRACE -u $(id -u myusername):$(id -g myusername) -v /path/to/mssql:/var/opt/mssql -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
Permanente opslagmachtigingen configureren voor niet-hoofdcontainers
Als u wilt dat de niet-hoofdgebruiker toegang heeft tot databasebestanden die zich op gekoppelde volumes bevinden, moet u ervoor zorgen dat de gebruiker of groep waaronder u de container uitvoert, de permanente bestandsopslag kan lezen van en schrijven naar.
U kunt het huidige eigendom van de databasebestanden ophalen met deze opdracht.
ls -ll <database file dir>
Voer een van de volgende opdrachten uit als SQL Server geen toegang heeft tot persistente databasebestanden.
De hoofdgroep lees-/schrijftoegang verlenen tot de databasebestanden
Ververleent de hoofdgroep machtigingen aan de volgende mappen, zodat de niet-hoofd-SQL Server-container toegang heeft tot databasebestanden.
chgrp -R 0 <database file dir>
chmod -R g=u <database file dir>
De niet-hoofdgebruiker instellen als eigenaar van de bestanden
De eigenaar kan de standaard niet-rootgebruiker zijn of een andere niet-rootgebruiker die u wilt opgeven. In dit voorbeeld stelt u UID 10001 in als de niet-hoofdgebruiker.
chown -R 10001:0 <database file dir>
Verbindingen met SQL Server Linux-containers versleutelen
Belangrijk
Wanneer u Active Directory-verificatie of versleutelingsopties configureert, zoals Transparent Data Encryption (TDE) en SSL/TLS voor SQL Server op Linux of containers, zijn er verschillende bestanden, zoals de keytab, certificaten en computersleutel, die standaard worden gemaakt onder de map /var/opt/mssql/secretsen toegang waartoe standaard is beperkt en mssqlroot gebruikers. Wanneer u permanente opslag configureert voor SQL Server-containers, gebruikt u dezelfde toegangsstrategie om ervoor te zorgen dat het pad op de host of het gedeelde volume dat is toegewezen aan de map in de /var/opt/mssql/secrets container is beveiligd en alleen toegankelijk is voor de mssql en root gebruikers op de host. Als de toegang tot dit pad/deze map is aangetast, kan een kwaadwillende gebruiker toegang krijgen tot deze kritieke bestanden, wat de versleutelingshiërarchie en/of Active Directory-configuraties in gevaar brengt.
Als u verbindingen met SQL Server Linux-containers wilt versleutelen, hebt u een certificaat nodig met de volgende vereisten.
Hier volgt een voorbeeld van hoe de verbinding kan worden versleuteld met SQL Server Linux-containers. Hier gebruikt u een zelfondertekend certificaat, dat niet moet worden gebruikt voor productiescenario's. Voor dergelijke omgevingen moet u in plaats daarvan CA-certificaten gebruiken.
Maak een zelfondertekend certificaat dat alleen geschikt is voor test- en niet-productieomgevingen.
openssl req -x509 -nodes -newkey rsa:2048 -subj '/CN=sql1.contoso.com' -keyout /container/sql1/mssql.key -out /container/sql1/mssql.pem -days 365In het vorige codevoorbeeld is
sql1de hostnaam van de SQL-container, dus wanneer u verbinding maakt met deze container, wordt de naam die in de verbindingsreeks wordt gebruikt,sql1.contoso.com,port. U moet er ook voor zorgen dat het mappad/container/sql1/al bestaat voordat u de vorige opdracht uitvoert.Zorg ervoor dat u de juiste machtigingen instelt voor de
mssql.key- enmssql.pem-bestanden, zodat u fouten vermijdt wanneer u de bestanden koppelt aan de SQL Server-container:chmod 440 /container/sql1/mssql.pem chmod 440 /container/sql1/mssql.keyMaak nu een
mssql.confbestand met de volgende inhoud om de door de server geïnitieerde versleuteling in te schakelen. Wijzig voor client geïnitieerde versleuteling de laatste regel inforceencryption = 0.[network] tlscert = /etc/ssl/certs/mssql.pem tlskey = /etc/ssl/private/mssql.key tlsprotocols = 1.2 forceencryption = 1Notitie
Voor sommige Linux-distributies kan het pad voor het opslaan van het certificaat respectievelijk
/etc/pki/tls/certs/en/etc/pki/tls/private/zijn. Controleer het pad voordat u demssql.confvoor SQL Server-containers bijwerkt. De locatie die u in demssql.confcontainer instelt, is de locatie waar SQL Server in de container naar het certificaat en de bijbehorende sleutel zoekt. In dit geval is die locatie/etc/ssl/certs/en/etc/ssl/private/.Het
mssql.confbestand wordt ook gemaakt onder dezelfde maplocatie/container/sql1/. Nadat u de bovenstaande stappen hebt uitgevoerd, hebt u drie bestanden:mssql.conf,mssql.keyenmssql.pemin de mapsql1.Implementeer de SQL Server-container met de volgende opdracht (vervang
<password>door een geldig wachtwoord):docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=<password>" -p 5434:1433 --name sql1 -h sql1 -v /container/sql1/mssql.conf:/var/opt/mssql/mssql.conf -v /container/sql1/mssql.pem:/etc/ssl/certs/mssql.pem -v /container/sql1/mssql.key:/etc/ssl/private/mssql.key -d mcr.microsoft.com/mssql/server:2019-latestIn de vorige opdracht hebt u de
mssql.conf,mssql.pemenmssql.keybestanden gekoppeld aan de container en de poort 1433 (standaardpoort van SQL Server) in de container toegewezen aan poort 5434 op de host.Notitie
Als u Red Hat Enterprise Linux 8 en latere versies gebruikt, kunt u ook de opdracht gebruiken
podman runin plaats vandocker run.
Volg de secties 'Het certificaat registreren op uw clientcomputer' en 'Voorbeeldverbindingstekenreeksen' die worden beschreven in client geïnitieerde versleuteling om te beginnen met het versleutelen van verbindingen met SQL Server op Linux-containers.
Verwante inhoud
- Ga aan de slag met containerafbeeldingen van SQL Server 2017 (14.x) in Docker door de snelle start door te nemen.
 
- Ga aan de slag met containerinstallatiekopieën van SQL Server 2019 (15.x) in Docker door de quickstart te doorlopen
 
- Ga aan de slag met containerinstallatiekopieën van SQL Server 2022 (16.x) in Docker door de quickstart te doorlopen
 
- Aan de slag met SQL Server 2025 (17.x) Preview-containerafbeeldingen in Docker door de quickstart te volgen