Delen via


Service-SID's gebruiken om machtigingen te verlenen aan services in SQL Server

SQL Server maakt gebruik van BEVEILIGINGS-id's (SID's) per service, ook wel servicebeveiligingsprinciplen genoemd, zodat machtigingen rechtstreeks aan een specifieke service kunnen worden verleend. Deze methode wordt door SQL Server gebruikt om machtigingen te verlenen aan de engine- en agentservices (respectievelijk NT SERVICE\MSSQL$<InstanceName> en NT SERVICE\SQLAGENT$<InstanceName> ). Met deze methode hebben deze services alleen toegang tot de database-engine wanneer de services worden uitgevoerd. Zie KB2620201 (archiefkoppeling) voor meer informatie.

Dezelfde methode kan worden gebruikt bij het verlenen van machtigingen aan andere services. Het gebruik van een service-SID elimineert de overhead van het beheren en onderhouden van serviceaccounts en biedt een strakkere, gedetailleerdere controle over machtigingen die aan systeemresources worden verleend.

Voorbeelden van services waarbij een service-SID kan worden gebruikt, zijn:

  • System Center Operations Manager Health Service (NT SERVICE\HealthService)
  • WSFC-service (Windows Server Failover Clustering) (NT SERVICE\ClusSvc)

Sommige services hebben standaard geen service-SID. De service-SID moet worden gemaakt met SC.exe. Deze methode is gebruikt door Microsoft System Center Operations Manager-beheerders om toestemming te verlenen aan de HealthService binnen SQL Server.

Zodra de service-SID is gemaakt en bevestigd, moet deze worden verleend binnen SQL Server. Het verlenen van machtigingen wordt bereikt door een Windows-aanmelding te maken met behulp van SQL Server Management Studio (SSMS) of een Transact-SQL-query. Zodra de aanmelding is gemaakt, kan deze machtigingen worden verleend, worden toegevoegd aan rollen en worden toegewezen aan databases, net als elke andere aanmelding.

Aanbeveling

Als de fout Login failed for user 'NT AUTHORITY\SYSTEM' wordt ontvangen, controleert u of de service-SID bestaat voor de gewenste service, is de service-SID-aanmelding gemaakt in SQL Server en zijn de juiste machtigingen verleend aan de service-SID in SQL Server.

Security

Serviceaccounts elimineren

Normaal gesproken zijn serviceaccounts gebruikt om services toe te staan zich aan te melden bij SQL Server. Serviceaccounts voegen een extra beheercomplexiteit toe omdat het wachtwoord van het serviceaccount moet worden onderhouden en periodiek moet worden bijgewerkt. Daarnaast kunnen de referenties van het serviceaccount worden gebruikt door een persoon die probeert zijn activiteiten te maskeren tijdens het uitvoeren van acties in de instantie.

Fijngranigere machtigingen voor systeemaccounts

Systeemaccounts zijn in het verleden machtigingen verleend door een aanmelding te maken voor het LocalSystem-account (NT AUTHORITY\SYSTEM in en-us) of NetworkService-account (NT AUTHORITY\NETWORK SERVICE in en-us) en die aanmeldingen machtigingen te geven. Met deze methode worden proces- of servicemachtigingen verleend aan SQL, die wordt uitgevoerd als een systeemaccount.

Met behulp van een service-SID kunnen machtigingen worden verleend aan een specifieke service. De service heeft alleen toegang tot de resources waarvoor het toestemming heeft gekregen, wanneer het actief is. Als het HealthService account bijvoorbeeld als LocalSystem wordt uitgevoerd en de toekenning van View Server State wordt verleend, heeft het LocalSystem account alleen toestemming om View Server State wanneer het wordt uitgevoerd in de context van de HealthService. Als een ander proces toegang probeert te krijgen tot de serverstatus van SQL LocalSystem, wordt de toegang geweigerd.

Voorbeelden

Eén. Een service-SID maken

Met de volgende PowerShell-opdracht maakt u een service-SID in de System Center Operations Manager-statusservice.

sc.exe --% sidtype "HealthService" unrestricted

Belangrijk

--% geeft PowerShell de opdracht om te stoppen met het verwerken van de rest van de opdracht. Dit is handig bij het gebruik van verouderde opdrachten en toepassingen.

B. Een query uitvoeren op een service-SID

Als u wilt controleren of een service-SID bestaat, voert u de volgende opdracht uit in PowerShell.

sc.exe --% qsidtype "HealthService"

Belangrijk

--% laat PowerShell stoppen met het parseren van de rest van de opdracht. Dit is handig bij het gebruik van verouderde opdrachten en toepassingen.

C. Een zojuist gemaakte service-SID toevoegen als aanmelding

In het volgende voorbeeld wordt een aanmelding gemaakt voor de System Center Operations Manager-statusservice met behulp van T-SQL.

CREATE LOGIN [NT SERVICE\HealthService] FROM WINDOWS
GO

D. Een bestaande service-SID toevoegen als aanmelding

In het volgende voorbeeld wordt een aanmelding voor de clusterservice gemaakt met behulp van T-SQL. Als u machtigingen aan de clusterservice verleent, hoeft u geen overmatige machtigingen meer te verlenen aan het SYSTEEM-account.

CREATE LOGIN [NT SERVICE\ClusSvc] FROM WINDOWS
GO

E. Machtigingen verlenen aan een service-SID

Verdeel de vereiste machtigingen voor het beheren van beschikbaarheidsgroepen aan de clusterservice.

GRANT ALTER ANY AVAILABILITY GROUP TO [NT SERVICE\ClusSvc]
GO

GRANT CONNECT SQL TO [NT SERVICE\ClusSvc]
GO

GRANT VIEW SERVER STATE TO [NT SERVICE\ClusSvc]
GO

Opmerking

Het verwijderen van de service-SID-aanmeldingen of het verwijderen van de sysadmin-serverfunctie kan problemen veroorzaken voor verschillende onderdelen van SQL Server die verbinding maken met de SQL Server Database Engine. Enkele problemen zijn onder andere:

  • SQL Server Agent kan niet worden gestart of verbinding maken met een SQL Server-service
  • Sql Server Setup-programma's ondervinden het probleem dat wordt vermeld in het volgende Microsoft Knowledge Base-artikel: https://mskb.pkisolutions.com/kb/955813

Voor een standaardexemplaren van SQL Server kunt u deze situatie corrigeren door de service-SID toe te voegen met behulp van de volgende Transact-SQL opdrachten:

CREATE LOGIN [NT SERVICE\MSSQLSERVER] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQLSERVER]

CREATE LOGIN [NT SERVICE\SQLSERVERAGENT] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLSERVERAGENT]

Gebruik de volgende Transact-SQL opdrachten voor een benoemd exemplaar van SQL Server:

CREATE LOGIN [NT SERVICE\MSSQL$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\MSSQL$SQL2019]

CREATE LOGIN [NT SERVICE\SQLAgent$SQL2019] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]

ALTER ROLE sysadmin ADD MEMBER [NT SERVICE\SQLAgent$SQL2019]

In dit voorbeeld SQL2019 is dit de exemplaarnaam van de SQL Server.

Volgende stappen

Lees SERVICE_SID_INFO Structuur voor meer informatie over de service SID-structuur.

Lees meer over aanvullende opties die beschikbaar zijn bij het maken van een aanmelding.

Als u Role-Based Beveiliging met service-SID's wilt gebruiken, leest u meer over het maken van rollen in SQL Server.

Lees meer over verschillende manieren om machtigingen te verlenen aan service-SID's in SQL Server.

Lees Windows-serviceaccounts en -machtigingen configureren voor meer informatie over het configureren van serviceaccounts voor SQL Server.