Tjänst-SID

Det här avsnittet beskriver hur du konfigurerar övervakning med hjälp av tjänst-SID för SQL Server på en Windows Server-instans. Dessa steg publicerades först av Kevin Holman i hans blogg. SQL-skripten för att konfigurera åtkomst med lägsta behörighet utvecklades av Brandon Adams.

Utför följande steg för att konfigurera övervakning med hjälp av Service Security Identifier:

  1. Öppna kommandotolken som administratör och kör följande kommando:

    sc sidtype HealthService unrestricted
    
  2. Starta om Hälsotjänst.

  3. Kör kommandot:

    sc showsid HealthService
    

    Parametern STATUS ska vara aktiv.

    Running HealthService

  4. Öppna Registereditorn och kontrollera att Nyckeln ServiceSidType är inställd på 1 vid HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HealthService.

  5. Skapa inloggningen NT SERVICE\HealthService för HealthService SID på varje SQL Server-instans och bevilja den SA-rättigheter.

    Om du inte kan bevilja SA-rättigheter använder du följande SQL-skript för att ange den lägsta behörighetskonfigurationen för kontot.

    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];
    GRANT EXECUTE ON sys.xp_instance_regread 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='SQLAgentReaderRole', @membername='SCOM_HealthService';
    
  6. Om du vill köra SQL Server MP-uppgifter, till exempel Ställ in databasen offline, Ställ in databasen online och Ställ in databasen på nödtillstånd, beviljar du HealthService SID-kontot alter any database-behörigheten.

    USE [master]
    GRANT ALTER ANY DATABASE TO [SCOM_HealthService];
    
  7. Använd kontot "Lokalt system" för att köra Hälsotjänst på SQL Server som finns på en Windows Server-instans.

Kontot NT AUTHORITY\SYSTEM ska finnas som en SQL-inloggning och får inte inaktiveras. Den här inloggningen måste också finnas och aktiverad för klusternoder och AlwaysOn.