建立 RSExecRole
Reporting Services 會使用稱為 RSExecRole 的預先定義資料庫角色,授與報表伺服器對報表伺服器資料庫的權限。 RSExecRole 角色會自動與報表伺服器資料庫一起建立。 您絕對不能修改它或是將其他使用者指派給這個角色,這是一般的規則。 但是,當您將報表伺服器資料庫移到新的或不同的 SQL Server 資料庫引擎時,則必須在 Master 與 MSDB 系統資料庫中重新建立角色。
使用下列指示執行下列步驟:
在 Master 系統資料庫中建立及佈建 RSExecRole 。
在 MSDB 系統資料庫中建立及佈建 RSExecRole 。
注意
本主題的指示適用於不想要執行指令碼或撰寫 WMI 程式碼來提供報表伺服器資料庫的使用者。 如果您管理大型部署,而且平常都會移動資料庫,您應該撰寫指令碼,讓這些步驟自動化。 如需詳細資訊,請參閱 存取 Reporting Services WMI 提供者。
開始之前
請備份加密金鑰,好讓您可以在移動資料庫之後還原這些金鑰。 這個步驟不會直接影響您建立及佈建 RSExecRole的能力,但是您必須擁有金鑰的備份,才能夠確認您的工作。 如需詳細資訊,請參閱 備份與還原 Reporting Services 加密金鑰。
驗證您是否已使用對 SQL Server 執行個體具有 sysadmin 權限的使用者帳戶登入。
驗證 SQL Server Agent 是否已安裝在您打算使用的資料庫引擎執行個體上,並在其上執行中。
附加 ReportServerTempDB 與 ReportServer 資料庫。 您不需要附加這些資料庫也可以建立實際角色,但是在您測試工作以前,必須要附加這些資料庫。
手動建立 RSExecRole 的指示是要用於移轉報表伺服器安裝的環境。 本文不會說明類似備份及移動報表伺服器資料庫等重要工作,這些工作記載於 Database Engine 文件集內。
在 Master 資料庫中建立 RSExecRole
Reporting Services 會使用適用於 SQL Server Agent 服務的擴充預存程序來支援排程作業。 下列步驟說明如何將這些程序的 Execute 權限授與給 RSExecRole 角色。
使用 Management Studio 在 Master 系統資料庫中建立 RSExecRole
啟動 SQL Server Management Studio,並連線到裝載報表伺服器資料庫的資料庫引擎執行個。
開啟 [資料庫]。
開啟 [系統資料庫]。
開啟 [Master]。
開啟 [安全性]。
開啟 [角色]。
以滑鼠右鍵按一下 [資料庫角色],然後選取 [新增資料庫角色]。 [資料庫角色 - 新增] 頁面隨即出現。
在角色名稱中,輸入 RSExecRole。
在擁有者中,輸入 dbo。
選取安全性實體頁面。
選取 [搜尋]。 [加入物件] 對話方塊隨即出現。 預設會選取 [特定物件] 選項。
選取 [確定]。 [選取物件] 對話方塊隨即出現。
選取物件類型。
選取擴充預存程序。
選取 [確定]。
選取瀏覽。
向下捲動清單,並選取下列程序:
xp_sqlagent_enum_jobs
xp_sqlagent_is_starting
xp_sqlagent_notify
選取確定,然後再選取確定。
在 [執行] 資料列中,選取 [授與] 資料行中的核取方塊。
針對每個剩餘的預存程序重複此步驟。 RSExecRole 必須針對所有三個預存程序授與「執行」權限。
選取 [確定] 來完成。
在 MSDB 資料庫中建立 RSExecRole
Reporting Services 會使用適用於 SQL Server Agent 服務的預存程序,並從系統資料表擷取作業資訊來支援排程作業。 下列步驟說明如何將這些程序的 Execute 權限及資料表的 Select 權限授與給 RSExecRole。
在 MSDB 系統資料庫中建立 RSExecRole
重複類似的步驟來授與 MSDB 中預存程序和資料表的權限。 為了簡化步驟,您要個別佈建預存程序和資料表。
開啟 [MSDB]。
開啟 [安全性]。
開啟 [角色]。
以滑鼠右鍵按一下 [資料庫角色],然後選取 [新增資料庫角色]。 [一般] 頁面隨即出現。
在角色名稱中,輸入 RSExecRole。
在擁有者中,輸入 dbo。
選取安全性實體頁面。
選取 [搜尋]。 [加入物件] 對話方塊隨即出現。 預設會選取 [指定物件] 選項。
選取 [確定]。
選取物件類型。
選取預存程序。
選取 [確定]。
選取瀏覽。
向下捲動項目清單,並選取下列預存程序:
sp_add_category
sp_add_job
sp_add_jobschedule
sp_add_jobserver
sp_add_jobstep
sp_delete_job
sp_help_category
sp_help_job
sp_help_jobschedule
sp_verify_job_identifiers
選取確定,然後再選擇確定。
選取第一個預存程序:sp_add_category。
在執行橫列中,選取授與直欄中的核取方塊。
針對每個剩餘的預存程序重複此步驟。 必須針對所有的 10 個預存程序為 RSExecRole 授與 Execute 權限。
同樣在安全性實體頁面上,再次選取搜尋。 [加入物件] 對話方塊隨即出現。 預設會選取 [指定物件] 選項。
選取 [確定]。
選取物件類型。
選取資料表。
選取 [確定]。
選取瀏覽。
向下捲動項目的清單,並選取下列資料表:
syscategories
sysjobs
選取確定,然後再選取確定。
選取第一個資料表:syscategories。
在 Select 橫列中,選取授與直欄中的核取方塊。
針對 sysjobs 資料表重複此步驟。 必須針對這兩個資料表為 RSExecRole 授與 Select 權限。
選取 [確定] 來完成。
移動報表伺服器資料庫
在建立角色之後,您可以將報表伺服器資料庫移到新的 SQL Server 執行個體。 如需詳細資訊,請參閱將報表伺服器資料庫移至其他電腦。
如果您要將資料庫引擎升級到 SQL Server 2016 或更新版本,則可以在移動資料庫之前或之後來升級。
當報表伺服器連線到報表伺服器資料庫時,報表伺服器資料庫將會自動升級。 升級此資料庫不需要任何特定步驟。
還原加密金鑰及確認工作
如果您已附加報表伺服器資料庫,您現在應該能夠完成以下步驟來確認您的工作。
在移動資料庫之後確認報表伺服器是否可操作
啟動 Reporting Services 組態工具,並連接到報表伺服器。
選取資料庫。
選取 [變更資料庫]。
選取 [選擇現有報表伺服器資料庫]。
輸入 Database Engine 的伺服器名稱。 如果您將報表伺服器資料庫附加到具名執行個體,您應該使用以下格式輸入此執行個體名稱:<servername>\<instancename>。
選取 [測試連線]。 您應該會看到一個對話方塊,其指出「測試連線成功」。
選取 [確定] 關閉對話方塊,然後選取 [下一步]。
在 [資料庫] 上,選取報表伺服器資料庫。
選取下一步並完成精靈。
選取加密金鑰。
選取還原。
選取具有對稱金鑰之備份副本 (用來解密預存認證) 及報表伺服器資料庫中之連接資訊的強式檔案 (.snk)。
輸入密碼,然後選取確定。
選取 Web 入口網站 URL。
選取連結來開啟 Web 入口網站。 您應該可從報表伺服器資料庫中看到報表伺服器項目。
使用 T-SQL 建立 RSExecRole 角色和權限
您也可以使用下列 T-SQL 指令碼,在系統資料庫上建立角色並授予適用權限:
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