RSExecRole を作成する
Reporting Services では、RSExecRole と呼ばれる定義済みのデータベース ロールを使用して、レポート サーバー データベースに対するレポート サーバーの権限が付与されます。 RSExecRole ロールは、レポート サーバー データベースで自動的に作成されます。 原則として、このロールを変更したり、他のユーザーをこのロールに割り当てたりすることはできません。 ただし、レポート サーバー データベースを新規または別の SQL Server データベース エンジンに移動した場合は、master および MSDB システム データベースでロールを再作成する必要があります。
次の手順に従って、以下の操作を実行します。
master システム データベースでの RSExecRole の作成と準備
MSDB システム データベースでの RSExecRole の作成と準備
Note
ここで説明する手順は、レポート サーバー データベースを準備する方法としてスクリプトの実行や WMI コードの作成を考えていないユーザーを対象としています。 大規模な配置を管理していて、データベースを定期的に移動する予定がある場合は、上記の操作を自動的に実行するスクリプトを作成する必要があります。 詳細については、「 Reporting Service WMI プロバイダーへのアクセス」を参照してください。
開始する前に
データベースを移動した後に復元できるように、暗号化キーをバックアップします。 この手順は RSExecRoleの作成およびプロビジョニングの機能には直接影響しませんが、作業を確認するためにはキーのバックアップが必要です。 詳細については、「 Back Up and Restore Reporting Services Encryption Keys」を参照してください。
SQL Server インスタンスでの sysadmin 権限を持つユーザー アカウントでログオンしていることを確認します。
使用する予定のデータベース エンジン インスタンスに SQL Server エージェント サービスがインストールされ、実行されていることを確認します。
ReportServerTempDB および ReportServer データベースをアタッチします。 実際のロールを作成するためにデータベースをアタッチする必要はありませんが、作業を確認する場合は事前にデータベースをアタッチする必要があります。
RSExecRole を手動で作成する手順は、レポート サーバー インストールの移行というコンテキストで使用されることを目的としています。 レポート サーバー データベースのバックアップや移動などの重要なタスクは、この記事では取り上げませんが、データベース エンジンのドキュメントで説明されています。
master での RSExecRole の作成
Reporting Services では、SQL Server エージェント サービスの拡張ストアド プロシージャを使用して、スケジュールされた操作をサポートします。 次の手順では、プロシージャの実行権限を RSExecRole ロールに付与する方法について説明します。
Management Studio を使用して master システム データベースに RSExecRole を作成する
SQL Server Management Studio を開始し、レポート サーバー データベースをホストしているデータベース エンジン インスタンスに接続します。
[データベース]を開きます。
[システム データベース]を開きます。
[master]を開きます。
[セキュリティ]を開きます。
[ロール]を開きます。
[データベース ロール]を右クリックして [新しいデータベース ロール]をクリックします。 [データベース ロール - 新規] ページが表示されます。
[ロール名] に「RSExecRole」と入力します。
[所有者] に「dbo」と入力します。
[セキュリティ保護可能なリソース] ページを選択します。
[Search] を選択します。 [オブジェクトの追加] ダイアログ ボックスが表示されます。 既定では、 [特定のオブジェクト] オプションが選択されています。
[OK] を選択します。 [オブジェクトの選択] ダイアログ ボックスが表示されます。
オブジェクトの種類を選択する。
拡張ストアド プロシージャ。
[OK] を選択します。
[参照] を選択します。
一覧を下にスクロールし、以下の手順を選択します。
xp_sqlagent_enum_jobs
xp_sqlagent_is_starting
xp_sqlagent_notify
[OK] を選択し、もう一度 [OK] を選択します。
[実行] 行の [許可] 列で、チェック ボックスを選択します。
残りの各ストアド プロシージャに同じ操作を繰り返します。 RSExecRole には、3 個のストアド プロシージャすべてに対する実行権限を付与する必要があります。
[OK] を選択して作業を終了します。
MSDB での RSExecRole の作成
Reporting Services は、スケジュールされた操作をサポートするために、SQL Server エージェント サービスのストアド プロシージャを使用し、システム テーブルからジョブ情報を取得します。 次の手順では、プロシージャに対する実行権限およびテーブルでの選択権限を RSExecRole に付与する方法を説明します。
MSDB システム データベースで RSExecRole を作成する
MSDB のストアド プロシージャとテーブルに対する権限を付与する場合は、同様の手順を繰り返します。 手順を簡素化するために、ストアド プロシージャとテーブルを別々にプロビジョニングします。
[MSDB]を開きます。
[セキュリティ]を開きます。
[ロール]を開きます。
[データベース ロール]を右クリックして [新しいデータベース ロール]をクリックします。 [全般] ページが表示されます。
[ロール名] に「RSExecRole」と入力します。
[所有者] に「dbo」と入力します。
[セキュリティ保護可能なリソース] ページを選択します。
[Search] を選択します。 [オブジェクトの追加] ダイアログ ボックスが表示されます。 [オブジェクトの指定] オプションが既定で選択されます。
[OK] を選択します。
オブジェクトの種類を選択する。
[ストアド プロシージャ] を選択します。
[OK] を選択します。
[参照] を選択します。
アイテムの一覧を下にスクロールし、以下のストアド プロシージャを選択します。
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
[OK] を選択してから、もう一度 [OK] を選びます。
最初のストアド プロシージャ sp_add_category を選択します。
[実行] 行の [許可] 列で、チェック ボックスを選択します。
残りの各ストアド プロシージャに同じ操作を繰り返します。 RSExecRole には、10 個のストアド プロシージャすべてに対する実行権限を付与する必要があります。
引き続き [セキュリティ保護可能なリソース] ページでもう一度 [検索] を選択します。 [オブジェクトの追加] ダイアログ ボックスが表示されます。 [オブジェクトの指定] オプションが既定で選択されます。
[OK] を選択します。
オブジェクトの種類を選択する。
テーブルを選択します。
[OK] を選択します。
[参照] を選択します。
項目の一覧を下にスクロールし、以下のテーブルを選択します。
syscategories
sysjobs
[OK] を選択し、もう一度 [OK] を選択します。
最初のテーブル syscategories を選択します。
[選択] 行の [許可] 列で、チェック ボックスを選択します。
sysjobs テーブルに同じ操作を繰り返します。 RSExecRole には、両方のテーブルに対する選択権限を付与する必要があります。
[OK] を選択して作業を終了します。
レポート サーバー データベースの移動
ロールを作成したら、レポート サーバー データベースを新しい SQL Server インスタンスに移動できます。 詳細については、「別のコンピューターへのレポート サーバー データベースの移動」を参照してください。
データベース エンジンを SQL Server 2016 以降にアップグレードする場合、そのアップグレードはデータベースを移動する前と後のどちらでも実行できます。
レポート サーバー データベースは、レポート サーバーがそのデータベースに接続するときに、自動的にアップグレードされます。 データベースをアップグレードするために特定の手順を実行する必要はありません。
暗号化キーの復元と作業の確認
レポート サーバー データベースをアタッチしたら、次の手順を実行して作業を確認します。
データベース移動後にレポート サーバーの運用性を確認する
Reporting Services 構成ツールを起動して、レポート サーバーに接続します。
データベースを選択します。
[データベースの変更]をクリックします。
[既存のレポート サーバー データベースを選択する]をクリックします。
データベース エンジンのサーバー名を入力します。 レポート サーバー データベースを名前付きインスタンスにアタッチした場合は、<サーバー名>\<インスタンス名> の形式でインスタンス名を入力する必要があります。
[接続テスト] を選択します。 "接続テストに成功しました" というダイアログ ボックスが表示されるはずです。
[OK] を選択してダイアログ ボックスを閉じ、[次へ] を選択します。
[データベース] で、レポート サーバー データベースを選択します。
[次へ] を選択し、ウィザードを完了します。
[暗号化キー] を選択 します。
[復元] を選択します。
レポート サーバー データベースに格納されている資格情報および接続情報の暗号化を解除するために使用される対称キーのバックアップ コピーが含まれている厳密な名前のキー ファイル (.snk) を選択します。
パスワードを入力して、[OK] を選択します。
[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