Идентификатор безопасности службы
В этом разделе объясняется, как настроить мониторинг с помощью идентификаторов безопасности служб для SQL Server в экземпляре Windows Server. Эти инструкции впервые опубликовал Кевин Холман (Kevin Holman) в своем блоге. Скрипты SQL для настройки доступа с наименьшими привилегиями были разработаны Брэндоном Адамсом.
Чтобы настроить мониторинг с помощью идентификатора безопасности службы, выполните следующие действия для каждого отслеживаемого сервера с запущенным ядром СУБД SQL Server:
Откройте командную строку от имени администратора и выполните следующую команду:
sc sidtype HealthService unrestricted
Перезапустите службу работоспособности.
Выполните команду:
sc showsid HealthService
Параметр STATUS должен быть активен.
Откройте редактор реестра и убедитесь, что для ключа ServiceSidType задано значение 1 в
HKLM\SYSTEM\CurrentControlSet\Services\HealthService
Откройте среду SQL Server Management Studio и подключитесь к экземпляру ядра СУБД SQL Server.
Создайте имя входа NT SERVICE\HealthService для SID службы работоспособности в каждом экземпляре SQL Server и предоставьте права системного администратора.
Если вы не можете предоставить права SA, используйте следующий скрипт SQL, чтобы задать конфигурацию с наименьшими привилегиями для учетной записи:
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]; 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];
Для выполнения задач пакета управления SQL Server, таких как Перевод базы данных в режим "вне сети" , Перевод базы данных в режим "в сети" и Перевод базы данных в аварийное состояние, предоставьте учетной записи SID службы работоспособности разрешение ALTER ANY DATABASE.
USE [master]; GRANT ALTER ANY DATABASE TO [SCOM_HealthService];
В свойствах Microsoft Monitoring Agent для выбранной группы управления задайте учетную запись Local System для выполнения действий агента.
Учетная запись NT AUTHORITY\SYSTEM должна присутствовать в качестве имени входа SQL и не должна быть отключена. Это имя входа также должно присутствовать и быть включено для узлов кластера и Always On.
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по