使用 T-SQL 建立 RSExecRole 角色和權限

今天嘗試移轉SQL2008R2的SSRS到SQL2019上,然而SQL2019的RS得另外下載安裝,裝完RS後該系統會自動去SQL內的master及msdb中建立RSExecRole這一個角色並授權一些SP及Table給RS,讓RS有權限去維護SQL Agent的作業或排程等...

但不知為何我裝完後該RSExecRole角色在master及msdb中都有建立,可是都沒授權這一個角色可以使用哪一些物件,導致我RS部分功能都不能跑(例如設定排程這部份)

,因此查了一下官方文件,確認那些物件需要授權給RSExecRole才能讓RS正常WORK(另一個懶人法就是給RS帳號sysadmin權限,最快又省事)。官方文件授權語法如下

USE master;
GO
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE [type] = 'R' AND [name] = 'RSExecRole') BEGIN
    CREATE ROLE [RSExecRole];
END
GRANT EXECUTE ON dbo.xp_sqlagent_enum_jobs TO [RSExecRole];
GRANT EXECUTE ON dbo.xp_sqlagent_is_starting TO [RSExecRole];
GRANT EXECUTE ON dbo.xp_sqlagent_notify TO [RSExecRole];
GO
USE msdb;
GO
IF NOT EXISTS (SELECT 1 FROM sys.database_principals WHERE [type] = 'R' AND [name] = 'RSExecRole') BEGIN
    CREATE ROLE [RSExecRole];
END
GRANT EXECUTE ON dbo.sp_add_category TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_job TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_jobschedule TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_jobserver TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_add_jobstep TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_delete_job TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_help_category TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_help_job TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_help_jobschedule TO [RSExecRole];
GRANT EXECUTE ON dbo.sp_verify_job_identifiers TO [RSExecRole];
GRANT SELECT ON dbo.syscategories TO [RSExecRole];
GRANT SELECT ON dbo.sysjobs TO [RSExecRole];
GO

以上物件授權完畢後就一切正常囉,筆記一下。

我是ROCK

rockchang@mails.fju.edu.tw