Udostępnij za pośrednictwem


Identyfikator SID serwisu

W tej sekcji opisano sposób konfigurowania monitorowania przy użyciu SIDów usług dla serwera SQL Server na instancji systemu Windows Server. Te kroki zostały po raz pierwszy opublikowane przez Kevina Holmana w jego blogu. Skrypty SQL do konfigurowania dostępu o najniższych uprawnieniach zostały opracowane przez Brandona Adamsa.

Aby skonfigurować monitorowanie przy użyciu identyfikatora zabezpieczeń usługi, wykonaj następujące kroki dla każdego monitorowanego serwera z uruchomionym aparatem bazy danych programu SQL Server:

  1. Otwórz wiersz polecenia jako administrator i uruchom następujące polecenie:

    sc sidtype HealthService unrestricted
    
  2. Uruchom ponownie usługę zdrowotną.

  3. Uruchom polecenie:

    sc showsid HealthService
    

    Parametr status powinien być aktywny.

    zrzut ekranu przedstawiający uruchamianie usługi HealthService.

  4. Otwórz Edytor rejestrui sprawdź, czy klucz ServiceSidType ma ustawioną wartość 1 na HKLM\SYSTEM\CurrentControlSet\Services\HealthService

  5. Otwórz SQL Server Management Studio i połącz się z wystąpieniem aparatu bazy danych SQL Server.

  6. Utwórz identyfikator logowania NT SERVICE\HealthService dla identyfikatora SID usługi HealthService w każdym wystąpieniu programu SQL Server i przyznaj mu uprawnienia SA.

    Jeśli nie możesz przyznać praw administratora konta, użyj następującego skryptu SQL, aby ustawić konfigurację najniższych uprawnień dla konta:

    USE [master];
    SET NOCOUNT ON;
    /*The user account that System Center Operations Manager will
    use to access the SQL Server instance*/
    DECLARE @accountname sysname = 'NT SERVICE\HealthService';
    /*In some cases, administrators change the 'sa' account default name.
    This will retrieve the name of the account associated to princicpal_id = 1*/
    DECLARE @sa_name sysname = 'sa';
    SELECT @sa_name = [name] FROM sys.server_principals WHERE principal_id = 1
    /*Create the server role with authorization to the account associated to principal id = 1.
    Create the role only if it does not already exist*/
    DECLARE @createSrvRoleCommand nvarchar(200);
    SET @createSrvRoleCommand = 'IF NOT EXISTS (SELECT 1 FROM sys.server_principals
    WHERE [name] = ''SCOM_HealthService'') BEGIN
    CREATE SERVER ROLE [SCOM_HealthService] AUTHORIZATION [' + @sa_name + ']; END'
    EXEC(@createSrvRoleCommand);
    GRANT VIEW 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 = 'IF NOT EXISTS (SELECT 1 FROM sys.server_principals
    WHERE [name] = '''+ @accountname +''') BEGIN
    CREATE LOGIN '+ QUOTENAME(@accountname) +' FROM WINDOWS WITH DEFAULT_DATABASE=[master]; END'
    EXEC(@createLoginCommand);
    -- Add the login to the user-defined server role
    DECLARE @addServerMemberCommand nvarchar(200);
    SET @addServerMemberCommand = 'ALTER SERVER ROLE [SCOM_HealthService] ADD MEMBER '
    + QUOTENAME(@accountname) + ';'
    EXEC(@addServerMemberCommand);
    -- Add the login and database role to each database
    DECLARE @createDatabaseUserAndRole nvarchar(max);
    SET @createDatabaseUserAndRole = '';
    SELECT @createDatabaseUserAndRole = @createDatabaseUserAndRole + ' USE ' + QUOTENAME(db.name) + ';
    IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE [name] = '''+ @accountname +''') BEGIN
    CREATE USER ' + QUOTENAME(@accountname) + ' FOR LOGIN ' + QUOTENAME(@accountname) + '; END;
    IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE [name] = ''SCOM_HealthService'') BEGIN
    CREATE ROLE [SCOM_HealthService] AUTHORIZATION [dbo]; END;
    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);
    -- Add database specific permissions to database role
    USE [master];
    GRANT EXECUTE ON sys.xp_readerrorlog TO [SCOM_HealthService];
    GRANT EXECUTE ON sys.xp_instance_regread TO [SCOM_HealthService];
    GRANT SELECT ON [sys].[indexes] TO [SCOM_HealthService];
    GRANT SELECT ON [sys].[tables] TO [SCOM_HealthService];
    GRANT SELECT ON [sys].[dm_db_index_physical_stats] 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].[syscategories] TO [SCOM_HealthService];
    GRANT SELECT ON [dbo].[sysjobs_view] TO [SCOM_HealthService];
    GRANT SELECT ON [dbo].[sysjobactivity] TO [SCOM_HealthService];
    GRANT SELECT ON [dbo].[sysjobhistory] TO [SCOM_HealthService];
    GRANT SELECT ON [dbo].[syssessions] 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].[agent_datetime] TO [SCOM_HealthService];
    GRANT EXECUTE ON [dbo].[SQLAGENT_SUSER_SNAME] TO [SCOM_HealthService];
    ALTER ROLE [SQLAgentReaderRole] ADD MEMBER [SCOM_HealthService];
    
  7. Aby uruchomić zadania MP programu SQL Server, takie jak Ustawianie bazy danych w trybie offline, Ustawianie bazy danych onlinei Ustawianie bazy danych w stanie awaryjnym, przyznaj konto usługi HealthService SID uprawnienie ALTER ANY DATABASE.

    USE [master];
    GRANT ALTER ANY DATABASE TO [SCOM_HealthService];
    
  8. W właściwości programu Microsoft Monitoring Agent dla wybranej grupy zarządzania ustaw konto systemu lokalnego do wykonywania akcji agenta.

Konto NT AUTHORITY\SYSTEM powinno być obecne jako identyfikator logowania SQL i nie może być wyłączone. To logowanie musi być również obecne i włączone dla węzłów klastra i Zawsze włączone.