見出し画像

RDS for Microsoft SQL Serverのマスターユーザー権限まとめ

RDS for Microsoft SQL Serverで、追加のマスターユーザー権限を持ったユーザを作成したい場合、セルフマネージドのSQLServerと違い「sysadmin」ロールが使用できないため、さくっと作成というわけにはいきません。

そういった状況になった場合の参考資料として、本記事ではマスターユーザ権限を持ったユーザー(以降管理者ユーザ)を作成する際の権限設定についてまとめます。

【ライターの紹介】
横浜事業部のSOYAです
クラウド環境を主にインフラエンジニアをしております。


最初に


本記事で使用するRDSのバージョンは「RDS for SQLServer 2019 StandardEdition」を利用し、マスターユーザは「admin」としています。管理者ユーザは下図の通り「subadmin」を作成しました。

バージョン:RDS for SQLServer 2019 StandardEdition
マスターユーザ:admin
管理者ユーザ:subadmin

以降の章より管理者ユーザの権限設定を行っていきます。
 

ログインのプロパティ


ホスト名 > セキュリティ > ログイン > 「subadmin」 > 右クリック でログインのプロパティを開きサーバロールの設定を行います。

マスターユーザーにはデフォルトで付与されている「proccessadmin」、「setupadmin」のロールを管理者ユーザに追加します。

「public」ロールは作成したすべてのユーザにデフォルトで付与されています。
(左:subadmin、右:admin)

 各ロールの内容はMicrosoft公式のサーバレベルのロールを参照すると下記の通り記載されています。

“processadmin 固定サーバー ロールのメンバーは、SQL Server のインスタンス内で実行中のプロセスを終了できます。”
“setupadmin 固定サーバー ロールのメンバーは、Transact-SQL ステートメントを使用して、リンク サーバーを追加および削除できます (Management Studio を使用するときは sysadmin メンバーシップが必要になります)。”

その他の各サーバロールとの住み分けは同サイトに添付されている下図を参考にしてください。

 次に ホスト名 > セキュリティ > ログイン > 「subadmin」 > 右クリック でログインのプロパティからユーザマッピングを開き、システムデータベースへの権限設定を行います。

まず、管理者ユーザを「msdb」へマッピングし、データベースロールの「SQLAgentUserRole」を付与することでユーザがSQL Server エージェント使用をすることを許可します。

SQL Server エージェントは、AWS公式のSQL Server エージェントの使用に記載の通り、ジョブと呼ばれるスケジュールされた管理タスクを実行する Microsoft Windows サービスで、SQL Server エージェントを使用して T-SQL ジョブを実行することが可能です。

「msdb」データベースの用途は「msdbの権限設定」で改めて記載します。

(左:subadmin、右:admin)

(下記はロール付与前後のSSMSの画面結果)

 下記ストアドプロシージャの実行でもロールの付与は可能です。

 次に管理者ユーザを「tempdb」へマッピングします。
(左:subadmin、右:admin)

tempdbの用途はMicrosoft公式tempdb データベースの内容を引用すると、

“tempdb は SQL Server が起動されるたびに再作成され、システムが常にデータベースのクリーンなコピーで起動されるようにします。 一時テーブルと一時ストアド プロシージャは、切断時に自動的に削除され、システムのシャットダウン時にアクティブな接続はありません。・・・”

と記載があり、一般的にクエリ実行時の一時作業領域として利用されます。
詳細はこちらのサイトSQL Serverインスタンスが内部で利用する一時領域「TEMPDB」とはを参照してみてください。
 
管理者ユーザのプロパティの最後の設定として、セキュリティ保護可能なリソースの設定を行いサーバレベルの権限を付与します。

RDS for SQLServerのマスターユーザの権限はAWS公式マスターユーザーアカウント権限を参照すると下記の通り記載されています。

“システム権限
ADMINISTER BULK OPERATIONS, ALTER ANY CONNECTION, ALTER ANY CREDENTIAL, ALTER ANY EVENT SESSION, ALTER ANY LINKED SERVER, ALTER ANY LOGIN, ALTER ANY SERVER AUDIT, ALTER ANY SERVER ROLE, ALTER SERVER STATE, ALTER TRACE, CONNECT SQL, CREATE ANY DATABASE, VIEW ANY DATABASE, VIEW ANY DEFINITION, VIEW SERVER STATE, ALTER ON ROLE SQLAgentOperatorRole”
 
そのため、下記のコマンドを実行し権限を付与します。

USE master;
GO
GRANT ADMINISTER BULK OPERATIONS TO subadmin WITH GRANT OPTION;
GRANT ALTER ANY CONNECTION TO subadmin WITH GRANT OPTION;
GRANT ALTER ANY CREDENTIAL TO subadmin WITH GRANT OPTION;
GRANT ALTER ANY EVENT SESSION TO subadmin WITH GRANT OPTION;
GRANT ALTER ANY LINKED SERVER TO subadmin WITH GRANT OPTION;
GRANT ALTER ANY LOGIN TO subadmin WITH GRANT OPTION;
GRANT ALTER ANY SERVER AUDIT TO subadmin WITH GRANT OPTION;
GRANT ALTER ANY SERVER ROLE TO subadmin WITH GRANT OPTION;
GRANT ALTER SERVER STATE TO subadmin WITH GRANT OPTION;
GRANT ALTER TRACE TO subadmin WITH GRANT OPTION;
GRANT CONNECT SQL TO subadmin WITH GRANT OPTION;
GRANT CREATE ANY DATABASE TO subadmin WITH GRANT OPTION;
GRANT VIEW ANY DATABASE TO subadmin WITH GRANT OPTION;
GRANT VIEW ANY DEFINITION TO subadmin WITH GRANT OPTION;
GRANT VIEW SERVER STATE TO subadmin WITH GRANT OPTION;

(実行結果)

 「ALTER ON ROLE SQLAgentOperatorRole」権限は下記コマンドにより付与します。

USE msdb;
GO
GRANT ALTER ON ROLE::[SQLAgentOperatorRole] TO subadmin WITH GRANT OPTION;
GO

(実行結果)


「SQLAgentOperatorRole」のメンバーにユーザを追加すると、そのユーザを使用してSSMSを通してインスタンスにログインするとエラーが生じるため、利用についてはAWS公式RDS SQL Server での SQLAgentOperatorRole の活用の注意事項をご確認ください。

tempdbの権限設定


ホスト名 > データベース > システムデータベース > tempdb > 右クリック でデータベースのプロパティを開き、権限の設定でsubadminに「制御」の権限を付与します。これにより、管理者ユーザが作成したユーザをtempdbへマッピングするといった操作が可能になります。

 msdbの権限設定


msdbの用途はMicrosoft公式msdb データベースの内容を引用すると、
“msdb データベースは、警告やジョブのスケジュール設定のために SQL Server エージェントが使用します。他にも SQL Server Management Studio、Service Broker、データベース メールなどの機能でも使用されます。”

とあるようにSQL Serverエージェント用の機能を持ちます。

RDS for SQLServerでは専用のストアドプロシージャがmsdbに用意されており、マスターユーザはデフォルトでプロシージャの実行権限を持ちますが、他ユーザへは個別に権限を付与する必要があります。

下記にSQL Server タスクの自動化に役立つ Amazon RDS 関数とストアドプロシージャの一覧を示します。

「msdb」データベースで必要な権限設定として、まず、ホスト名 > データベース > システムデータベース > msdb > 右クリック でデータベースのプロパティを開き、権限の設定で「subadmin」に「ユーザーの変更」の権限を付与します。

これにより、管理者ユーザが作成したユーザを「msdb」へマッピングするといった操作が可能になります。

 
次に、管理者ユーザが作成したユーザへ「SQL AgentUserRole」ロールを付与できる権限を設定します。

ホスト名 > データベース > システムデータベース > msdb > セキュリティ > ユーザ > subadmin > 右クリック でデータベースユーザーのプロパティを開き、セキュリティ保護可能なリソースの設定で「SQLAgentUserRole」ロールの「変更」権限を許可します。

(左:subadmin、右:admin)

 マスターユーザには他にも多数の「セキュリティ保護可能なリソース」の権限が付与されていますが、それらに関しては要件上必要なものを適宜付与してください。

まとめ


RDS for SQLServerのマスターユーザの権限についてまとめました。「msdbの権限設定」に記載の通り、「msdb」で用意されているストアドプロシージャやロールについては、あらかじめ権限を付与していないと期待通りに動作しないことがありますので、構築時に要確認をお願いします。

RDS for SQLServerは、権限以外にも、機能制限(サポート対象外の機能とサポートが制限されている機能)が多くあるため、十分に内容を確認の上、利用を検討してください。

ALHについて知る



↓ ↓ ↓ 採用サイトはこちら ↓ ↓ ↓


↓ ↓ ↓ コーポレートサイトはこちら ↓ ↓ ↓


↓ ↓ ↓ もっとALHについて知りたい? ↓ ↓ ↓