보안 구성

모니터링을 위해 이 관리 팩에서 사용하는 모니터링 계정, SQL 계정 및 Azure Active Directory 원칙에는 모니터링 템플릿에 지정된 각 관리되는 인스턴스에 액세스할 수 있는 충분한 권한이 있어야 합니다.

모든 관리되는 인스턴스에는 모니터링 계정에 대한 로그인이 있어야 합니다. 이 로그인에는 다음 권한 중 하나가 부여되어야 합니다.

  • Sysadmin 권한

  • 관리 팩이 작동할 수 있는 최소 수준의 권한(즉, 최소 권한 구성)입니다.

최소 권한 모니터링을 구성하려면 다음 스크립트를 예제로 사용합니다.

모든 관리형 인스턴스에 대해 다음 스크립트를 실행해야 합니다. 새 관리되는 인스턴스를 배포할 때 이러한 각 인스턴스에 대해 이 스크립트를 실행해야 합니다. 초기 실행 후에 만든 각 새 데이터베이스에 대해 스크립트를 실행할 필요가 없습니다. 이 스크립트는 나중에 생성되는 데이터베이스에 필요한 사용자가 포함되도록 model 데이터베이스를 업데이트하지만, 이 스크립트를 처음 실행한 후에 연결되거나 복원된 모든 데이터베이스에 대해 이 스크립트를 실행해야 합니다.

--First script that:
-- - Grants server-level permissions to the monitoring account.
-- - Creates a user and role in the master, msdb, and model databases and grants the required permissions to it.
-- - Creates a user and role in all user databases.
--Don't forget to replace 'YOURPASSWORD' with your value in @createLoginCommand variable.
USE [master];
SET NOCOUNT ON
DECLARE @accountname SYSNAME = 'MILowPriv';
CREATE SERVER ROLE [MILowPriv_role];
GRANT VIEW ANY DEFINITION TO [MILowPriv_role];
GRANT VIEW ANY DATABASE TO [MILowPriv_role];
GRANT ALTER ANY DATABASE TO [MILowPriv_role];
GRANT VIEW SERVER STATE TO [MILowPriv_role];
DECLARE @createLoginCommand nvarchar(200);
SET @createLoginCommand = 'CREATE LOGIN '+ QUOTENAME(@accountname) + ' WITH PASSWORD=N''YOURPASSWORD'', DEFAULT_DATABASE=[master];'
EXEC (@createLoginCommand);
EXEC sp_addsrvrolemember @loginame = @accountname, @rolename = 'MILowPriv_role';
DECLARE @createDatabaseUserAndRole nvarchar(max);
SET @createDatabaseUserAndRole = '';
SELECT @createDatabaseUserAndRole = @createDatabaseUserAndRole + 'USE ' + QUOTENAME(db.name) + ';
CREATE USER ' + QUOTENAME(@accountname) + ' FOR LOGIN ' + QUOTENAME(@accountname) + ';
CREATE ROLE [MILowPriv_role];
EXEC sp_addrolemember @rolename = ''MILowPriv_role'', @membername = ' + QUOTENAME(@accountname) + ''
FROM sys.databases db
WHERE db.database_id <> 2
AND db.user_access = 0
AND db.state = 0
AND db.is_read_only = 0;
EXEC (@createDatabaseUserAndRole);
GO
USE [master];
GRANT EXECUTE ON xp_readerrorlog TO [MILowPriv_role];
GRANT EXECUTE ON xp_instance_regread TO [MILowPriv_role];
GRANT EXECUTE ON xp_sqlagent_enum_jobs TO [MILowPriv_role];
GRANT EXECUTE ON sp_enumerrorlogs TO [MILowPriv_role];
USE [msdb];
GRANT EXECUTE ON sp_help_job TO [MILowPriv_role];
GRANT EXECUTE ON sp_help_jobactivity TO [MILowPriv_role];
GRANT SELECT ON sysjobschedules TO [MILowPriv_role];
GRANT SELECT ON backupset TO [MILowPriv_role];
EXEC sp_addrolemember @rolename='db_datareader', @membername='MILowPriv_role';
EXEC sp_addrolemember @rolename='db_owner', @membername='MILowPriv_role';
EXEC sp_addrolemember @rolename='SQLAgentReaderRole', @membername='MILowPriv_role';

이 스크립트는 모니터링 계정을 db_owner 역할에 추가합니다. 이 역할은 허용되지 않을 수 있습니다. DBCC 검사를 실행하는 데 관리 팩 작업을 사용하려면 db 소유자 권한이 필요합니다. 이러한 작업이 필요하지 않은 경우 이러한 권한을 부여하지 마세요.

--Second script that adds MILowPriv user to db_owner role for master, msdb, model, and all user databases.
--This is only to enable running DBCC checks right on SCOM (Check Catalog, Check Database, Check Disk).
--If you don't need this functionality, don't run this script.
DECLARE @accountname sysname = 'MILowPriv';
DECLARE @createDatabaseUserAndRole nvarchar(max);
SET @createDatabaseUserAndRole = '';
SELECT @createDatabaseUserAndRole = @createDatabaseUserAndRole + 'USE ' + QUOTENAME(db.name) + ';
EXEC sp_addrolemember @rolename = ''db_owner'', @membername = ' + QUOTENAME(@accountname) + ''
FROM sys.databases db
WHERE db.database_id <> 2
AND db.user_access = 0
AND db.state = 0
AND db.is_read_only = 0
EXEC (@createDatabaseUserAndRole);
GO