共用方式為


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

  1. 啟動 SQL Server Management Studio,並連線到裝載報表伺服器資料庫的資料庫引擎執行個。

  2. 開啟 [資料庫]

  3. 開啟 [系統資料庫]

  4. 開啟 [Master]

  5. 開啟 [安全性]

  6. 開啟 [角色]

  7. 以滑鼠右鍵按一下 [資料庫角色],然後選取 [新增資料庫角色]。 [資料庫角色 - 新增] 頁面隨即出現。

  8. 角色名稱中,輸入 RSExecRole

  9. 擁有者中,輸入 dbo

  10. 選取安全性實體頁面。

  11. 選取 [搜尋][加入物件] 對話方塊隨即出現。 預設會選取 [特定物件] 選項。

  12. 選取 [確定]。 [選取物件] 對話方塊隨即出現。

  13. 選取物件類型

  14. 選取擴充預存程序

  15. 選取 [確定]。

  16. 選取瀏覽

  17. 向下捲動清單,並選取下列程序:

    1. xp_sqlagent_enum_jobs

    2. xp_sqlagent_is_starting

    3. xp_sqlagent_notify

  18. 選取確定,然後再選取確定

  19. 在 [執行] 資料列中,選取 [授與] 資料行中的核取方塊。

  20. 針對每個剩餘的預存程序重複此步驟。 RSExecRole 必須針對所有三個預存程序授與「執行」權限。

  21. 選取 [確定] 來完成。

顯示 [資料庫角色屬性頁面] 頁面的螢幕擷取畫面。

在 MSDB 資料庫中建立 RSExecRole

Reporting Services 會使用適用於 SQL Server Agent 服務的預存程序,並從系統資料表擷取作業資訊來支援排程作業。 下列步驟說明如何將這些程序的 Execute 權限及資料表的 Select 權限授與給 RSExecRole。

在 MSDB 系統資料庫中建立 RSExecRole

  1. 重複類似的步驟來授與 MSDB 中預存程序和資料表的權限。 為了簡化步驟,您要個別佈建預存程序和資料表。

  2. 開啟 [MSDB]

  3. 開啟 [安全性]

  4. 開啟 [角色]

  5. 以滑鼠右鍵按一下 [資料庫角色],然後選取 [新增資料庫角色]。 [一般] 頁面隨即出現。

  6. 在角色名稱中,輸入 RSExecRole

  7. 在擁有者中,輸入 dbo

  8. 選取安全性實體頁面。

  9. 選取 [搜尋][加入物件] 對話方塊隨即出現。 預設會選取 [指定物件] 選項。

  10. 選取 [確定]。

  11. 選取物件類型

  12. 選取預存程序

  13. 選取 [確定]。

  14. 選取瀏覽

  15. 向下捲動項目清單,並選取下列預存程序:

    1. sp_add_category

    2. sp_add_job

    3. sp_add_jobschedule

    4. sp_add_jobserver

    5. sp_add_jobstep

    6. sp_delete_job

    7. sp_help_category

    8. sp_help_job

    9. sp_help_jobschedule

    10. sp_verify_job_identifiers

  16. 選取確定,然後再選擇確定

  17. 選取第一個預存程序:sp_add_category。

  18. 執行橫列中,選取授與直欄中的核取方塊。

  19. 針對每個剩餘的預存程序重複此步驟。 必須針對所有的 10 個預存程序為 RSExecRole 授與 Execute 權限。

  20. 同樣在安全性實體頁面上,再次選取搜尋[加入物件] 對話方塊隨即出現。 預設會選取 [指定物件] 選項。

  21. 選取 [確定]。

  22. 選取物件類型

  23. 選取資料表

  24. 選取 [確定]。

  25. 選取瀏覽

  26. 向下捲動項目的清單,並選取下列資料表:

    1. syscategories

    2. sysjobs

  27. 選取確定,然後再選取確定

  28. 選取第一個資料表:syscategories。

  29. Select 橫列中,選取授與直欄中的核取方塊。

  30. 針對 sysjobs 資料表重複此步驟。 必須針對這兩個資料表為 RSExecRole 授與 Select 權限。

  31. 選取 [確定] 來完成。

移動報表伺服器資料庫

在建立角色之後,您可以將報表伺服器資料庫移到新的 SQL Server 執行個體。 如需詳細資訊,請參閱將報表伺服器資料庫移至其他電腦

如果您要將資料庫引擎升級到 SQL Server 2016 或更新版本,則可以在移動資料庫之前或之後來升級。

當報表伺服器連線到報表伺服器資料庫時,報表伺服器資料庫將會自動升級。 升級此資料庫不需要任何特定步驟。

還原加密金鑰及確認工作

如果您已附加報表伺服器資料庫,您現在應該能夠完成以下步驟來確認您的工作。

在移動資料庫之後確認報表伺服器是否可操作

  1. 啟動 Reporting Services 組態工具,並連接到報表伺服器。

  2. 選取資料庫

  3. 選取 [變更資料庫]

  4. 選取 [選擇現有報表伺服器資料庫]

  5. 輸入 Database Engine 的伺服器名稱。 如果您將報表伺服器資料庫附加到具名執行個體,您應該使用以下格式輸入此執行個體名稱:<servername>\<instancename>。

  6. 選取 [測試連線]。 您應該會看到一個對話方塊,其指出「測試連線成功」。

  7. 選取 [確定] 關閉對話方塊,然後選取 [下一步]

  8. 在 [資料庫] 上,選取報表伺服器資料庫。

  9. 選取下一步並完成精靈。

  10. 選取加密金鑰

  11. 選取還原

  12. 選取具有對稱金鑰之備份副本 (用來解密預存認證) 及報表伺服器資料庫中之連接資訊的強式檔案 (.snk)。

  13. 輸入密碼,然後選取確定

  14. 選取 Web 入口網站 URL

  15. 選取連結來開啟 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