Dienst-SID
In diesem Abschnitt wird erläutert, wie Sie die Überwachung mithilfe von Dienst-SIDs für SQL Server auf einer Windows Server-Instanz konfigurieren. Diese Schritte wurden zuerst von Kevin Holman auf seinem Blog vorgestellt. Die SQL-Skripts zum Konfigurieren des Zugriffs mit den geringsten Rechten wurden von Brandon Adams entwickelt.
Führen Sie die folgenden Schritte aus, um die Überwachung mithilfe der Dienstsicherheits-ID zu konfigurieren:
Öffnen Sie die Eingabeaufforderung als Administrator, und führen Sie den Befehl sc sidtype HealthService unrestricted aus.
Starten Sie den Integritätsdienst neu.
Führen Sie den Befehl sc showsid HealthService aus.
Der STATUS-Parameter sollte aktiv sein.

Öffnen Sie den Registrierungs-Editor, und überprüfen Sie, ob der ServiceSidType-Schlüssel unter HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HealthService auf „1“ festgelegt ist.
Erstellen Sie die NT SERVICE\HealthService-Anmeldung für die HealthService-SID auf jeder SQL Server-Instanz, und gewähren Sie ihr Software Assurance-Rechte (SA).
Wenn Sie keine SA-Rechte erteilen können, verwenden Sie die folgenden SQL-Skripts, um die Konfiguration mit den geringsten Rechten für das Konto festzulegen.
USE [master] SET NOCOUNT ON /*User account that System Center Operations Manager will use to access Default is the Service SID for the HealthService*/ DECLARE @accountname sysname = 'NT SERVICE\HealthService' -- Create the server role and grant permissions CREATE SERVER ROLE [SCOM_HealthService] GRANT VIEW ANY DATABASE TO [SCOM_HealthService]; GRANT ALTER ANY DATABASE TO [SCOM_HealthService]; GRANT VIEW ANY DEFINITION TO [SCOM_HealthService]; GRANT VIEW SERVER STATE TO [SCOM_HealthService] DECLARE @createLoginCommand nvarchar(200) SET @createLoginCommand = ' CREATE LOGIN '+ QUOTENAME(@accountname) + ' FROM WINDOWS WITH DEFAULT_DATABASE=[master];' EXEC(@createLoginCommand); -- Add the login to the user-defined server role EXEC sp_addsrvrolemember @loginame = @accountname , @rolename = 'SCOM_HealthService' DECLARE @createDatabaseUserAndRole nvarchar(max) SET @createDatabaseUserAndRole = ''; SELECT @createDatabaseUserAndRole = @createDatabaseUserAndRole + ' USE ' + QUOTENAME(db.name) + '; CREATE USER ' + QUOTENAME(@accountname) + ' FOR LOGIN ' + QUOTENAME(@accountname) + '; CREATE ROLE [SCOM_HealthService]; EXEC sp_addrolemember @rolename = ''SCOM_HealthService'', @membername = '+ QUOTENAME(@accountname) + '' -- 'ALTER ROLE [SCOM_HealthService] ADD MEMBER ' -- '+ QUOTENAME(@accountname) + ';' FROM sys.databases db LEFT JOIN sys.dm_hadr_availability_replica_states hadrstate ON db.replica_id = hadrstate.replica_id WHERE db.database_id <> 2 AND db.user_access = 0 AND db.state = 0 AND db.is_read_only = 0 AND (hadrstate.role = 1 or hadrstate.role is null); EXEC(@createDatabaseUserAndRole) GO USE [master]; GRANT EXECUTE ON sys.xp_readerrorlog TO [SCOM_HealthService] USE [msdb]; GRANT SELECT ON [dbo].[sysjobschedules] TO [SCOM_HealthService]; GRANT SELECT ON [dbo].[sysschedules] TO [SCOM_HealthService]; GRANT SELECT ON [dbo].[sysjobs_view] TO [SCOM_HealthService]; GRANT SELECT ON [dbo].[syscategories] TO [SCOM_HealthService]; GRANT SELECT ON [dbo].[log_shipping_primary_databases] TO [SCOM_HealthService]; GRANT SELECT ON [dbo].[log_shipping_secondary_databases] TO [SCOM_HealthService]; GRANT SELECT ON [dbo].[log_shipping_monitor_history_detail] TO [SCOM_HealthService]; GRANT SELECT ON [dbo].[log_shipping_monitor_secondary] TO [SCOM_HealthService]; GRANT SELECT ON [dbo].[log_shipping_monitor_primary] TO [SCOM_HealthService]; GRANT EXECUTE ON [dbo].[sp_help_job] TO [SCOM_HealthService]; GRANT EXECUTE ON [dbo].[sp_help_jobactivity] TO [SCOM_HealthService]; GRANT EXECUTE ON [dbo].[SQLAGENT_SUSER_SNAME] TO [SCOM_HealthService]; EXEC sp_addrolemember @rolename='PolicyAdministratorRole', @membername='SCOM_HealthService'; EXEC sp_addrolemember @rolename='SQLAgentReaderRole', @membername='SCOM_HealthService';Gewähren Sie dem HealthService-SID-Konto die ALTER ANY DATABASE-Berechtigung, um SQL Server-MP-Aufgaben auszuführen, zum Beispiel Datenbank offline schalten, Datenbank online schalten und Datenbank in den Notfallzustand schalten.
USE [master] GRANT ALTER ANY DATABASE TO [SCOM_HealthService];
Das Konto „NT AUTHORITY\SYSTEM“ sollte als SQL-Anmeldung vorhanden sein und darf nicht deaktiviert werden. Diese Anmeldung muss auch für Clusterknoten und Always On vorhanden und aktiviert sein.