Sicherheitskonfiguration

Überwachungskonten, SQL-Konten und AAD-Prinzipale, die von diesem Management Pack für die Überwachung verwendet werden, sollten über ausreichende Berechtigungen für den Zugriff auf die einzelnen verwalteten Instanzen verfügen, die in Ihren Überwachungsvorlagen angegeben sind.

Jede verwaltete Instanz sollte über eine Anmeldung für das Überwachungskonto verfügen. Mit dieser Anmeldung sollte eine der folgenden Berechtigungen erteilt werden:

  • Systemadministratorrechte

  • Mindestberechtigungen, die den Betrieb des Management Packs ermöglichen (d. h. Konfiguration der geringsten Rechten)

Zum Konfigurieren der Überwachung mit geringsten Rechten verwenden Sie die folgenden Skripts als Beispiele.

Das folgende Skript sollte für jede verwaltete Instanz ausgeführt werden. Stellen Sie beim Bereitstellen neuer verwalteter Instanzen sicher, dass Sie dieses Skript für jede dieser Instanzen ausführen. Sie müssen das Skript nicht für jede neue Datenbank ausführen, die Sie nach der ersten Ausführung erstellt haben. Das Skript aktualisiert die Modelldatenbank, sodass später erstellte Datenbanken den erforderlichen Benutzer aufweisen. Sie müssen dieses Skript jedoch für jede Datenbank ausführen, die nach der ersten Ausführung dieses Skripts angefügt oder wiederhergestellt wurde.

--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';

Dieses Skript fügt das Überwachungskonto der Rolle db_owner hinzu, was möglicherweise nicht zulässig ist. Die db_owner-Berechtigungen sind erforderlich, damit die Management Pack-Tasks DBCC-Überprüfungen ausführen können. Wenn Sie diese Tasks nicht benötigen, erteilen Sie diese Berechtigungen nicht.

--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