データベース レベルのロール

適用対象: はいSQL Server (サポートされているすべてのバージョン) はいAzure SQL データベース はいAzure SQL Managed Instance はいAzure Synapse Analytics はいParallel Data Warehouse

SQL Server には、データベースでの権限を簡単に管理できるように、いくつかの ロール が用意されています。ロールは、セキュリティ プリンシパルとして他のプリンシパルをグループ化します。 ロールは、 Windows オペレーティング システムの グループ Microsoft に似ています。 データベース レベルのロールは、その権限のスコープがデータベース全体に及びます。

データベース ロールに対するユーザーの追加および削除を行うには、 ADD MEMBER ALTER ROLE DROP MEMBER ステートメントの のオプションを使用します。 Analytics Platform System (PDW) と Azure Synapse では、ALTER ROLE のこのような使用はサポートされません。 代わりに、以前の sp_addrolemembersp_droprolemember プロシージャを使用してください。

データベース レベルのロールは 2 種類あります。1 つはデータベースに事前に定義されている 固定データベース ロール 、もう 1 つはユーザーが作成できる ユーザー定義データベース ロール です。

固定データベース ロールはデータベース レベルで定義されており、各データベースに存在します。 db_owner データベース ロールのメンバーは、固定データベース ロールのメンバーシップを管理できます。 msdb データベースには、特別な用途のデータベース ロールもいくつかあります。

データベース レベルのロールには、すべてのデータベース アカウントとその他の SQL Server ロールを追加できます。

ヒント

ユーザー定義データベース ロールは、固定ロールのメンバーとして追加しないでください。 これを行うと、特権が意図せず昇格されることがあります。

ユーザー定義データベース ロールの権限は、GRANT、DENY、および REVOKE ステートメントを使用してカスタマイズできます。 詳細については、「 権限 (データベース エンジン)」を参照してください。

すべての権限の一覧については、 データベース エンジンの権限 ポスターを参照してください。 サーバー レベルの権限をデータベース ロールに付与することはできません。 ログインおよびその他のサーバー レベル プリンシパル (サーバー ロールなど) は、データベース ロールに追加できません。 SQL Serverでのサーバー レベル セキュリティでは、代わりに サーバー ロール を使用します。 サーバー レベルの権限を SQL Database と Azure Synapse のロールを介して付与することはできません。

固定データベース ロール

次の表に、固定データベース ロールとその機能を示します。 これらのロールは、すべてのデータベースに存在します。 public データベース ロールを除き、固定データベース ロールに割り当てられているアクセス許可を変更することはできません。

固定データベース ロールの名前 説明
db_owner db_owner 固定データベース ロールのメンバーは、データベースでのすべての構成作業とメンテナンス作業を実行でき、 SQL Serverでデータベースを削除することもできます。 (SQL Database と Azure Synapse では、一部のメンテナンス作業にサーバー レベルの権限が必要であり、db_owners では実行できません。)
db_securityadmin db_securityadmin 固定データベース ロールのメンバーは、カスタム ロールのロール メンバーシップのみの変更、および権限の管理を実行できます。 このロールのメンバーは、特権を昇格させる可能性があり、そのアクションを監視する必要があります。
db_accessadmin db_accessadmin 固定データベース ロールのメンバーは、Windows ログイン、Windows グループ、および SQL Server ログインのデータベースに対するアクセスを追加または削除できます。
db_backupoperator db_backupoperator 固定データベース ロールのメンバーは、データベースをバックアップできます。
db_ddladmin db_ddladmin 固定データベース ロールのメンバーは、すべての DDL (データ定義言語) コマンドをデータベースで実行できます。
db_datawriter db_datawriter 固定データベース ロールのメンバーは、すべてのユーザー テーブルのデータを追加、削除、または変更できます。
db_datareader db_datareader 固定データベース ロールのメンバーは、すべてのユーザー テーブルとビューからすべてのデータを読み取ることができます。 ユーザーオブジェクトは、sysINFORMATION_SCHEMA を除くどのスキーマにも存在できます。
db_denydatawriter db_denydatawriter 固定データベース ロールのメンバーは、データベース内のユーザー テーブルのデータを追加、変更、または削除することはできません。
db_denydatareader db_denydatareader 固定データベース ロールのメンバーは、データベース内のユーザー テーブルとビューのデータを読み取ることはできません。

固定データベース ロールに割り当てられている権限を変更することはできません。 次の図は、固定データベース ロールに割り当てられている権限を示しています。

fixed_database_role_permissions

特別なロール - SQL Database と Azure Synapse

以下のデータベース ロールは、仮想 master データベース内にのみ存在します。 その権限は master で実行されるアクションに制限されます。 これらのロールに追加できるのは、master のデータベース ユーザーのみです。 これらのロールにログインを追加することはできませんが、ログインに基づいてユーザーを作成してから、そのユーザーをロールに追加することはできます。 これらのロールに、master の包含データベース ユーザーを追加することもできます。 ただし、master の dbmanager ロールに追加された包含データベース ユーザーを使用して新しいデータベースを作成することはできません。

ロール名 説明
dbmanager データベースの作成と削除を行うことができます。 データベースを作成する dbmanager ロールのメンバーは、そのデータベースの所有者になります。これにより、ユーザーは dbo ユーザーとしてそのデータベースに接続できるようになります。 dbo ユーザーには、データベースでのすべてのデータベース権限があります。 dbmanager ロールのメンバーには、所有していないデータベースへのアクセス権が必ずしもあるとは限りません。
db_exporter Azure Synapse Analytics 専用 SQL プール (旧称 SQL DW) にのみ適用されます。
db_exporter 固定データベース ロールのメンバーは、すべてのデータ エクスポート アクティビティを実行できます。 このロールを介して付与されるアクセス許可は、CREATE TABLE、ALTER ANY SCHEMA、ALTER ANY EXTERNAL DATA SOURCE、ALTER ANY EXTERNAL FILE FORMAT です。
loginmanager 仮想 master データベースのログインを作成および削除できます。

注意

サーバー レベル プリンシパルと Azure Active Directory 管理者 (構成されている場合) には SQL Database と Azure Synapse でのすべての権限があり、すべてのロールのメンバーである必要はありません。 詳細については、「SQL Database の認証と承認:アクセス権の付与」を参照してください。

一部のデータベース ロールは Azure SQL または Synapse SQL には該当しません。

  • db_backupoperator は、バックアップおよび復元の T-SQL コマンドで使用できないため、Azure SQL データベース (マネージド インスタンスではない) および Synapse SQL サーバーレス プールには該当しません。
  • db_datawriterdb_denydatawriter は、外部データを読み取るだけなので、Synapse SQL サーバーレスには該当しません。

msdb ロール

msdb データベースには、次の表に示す特別な用途のロールが含まれています。

msdb ロール名 説明
db_ssisadmin

db_ssisoperator

db_ssisltduser
これらのデータベース ロールのメンバーは、 SSISを管理および使用できます。 以前のバージョンからアップグレードされた SQL Server のインスタンスには、SSIS ではなくデータ変換サービス (DTS) を使用して名前が付けられた古いバージョンのロールが含まれている場合があります。 詳細については、「Integration Services のロール (SSIS サービス)」を参照してください。
dc_admin

dc_operator

dc_proxy
これらのデータベース ロールのメンバーは、データ コレクターを管理および使用できます。 詳細については、「 Data Collection」を参照してください。
PolicyAdministratorRole PolicyAdministratorRole データベース ロールのメンバーは、ポリシー ベースの管理のポリシーと条件で、すべての構成作業とメンテナンス作業を実行できます。 詳細については、「 ポリシー ベースの管理を使用したサーバーの管理」を参照してください。
ServerGroupAdministratorRole

ServerGroupReaderRole
これらのデータベース ロールのメンバーは、登録済みサーバーのグループを管理および使用できます。
dbm_monitor データベース ミラーリング モニターに最初のデータベースが登録されたときに、 msdb データベースに作成されます。 dbm_monitor ロールには、メンバーは割り当てられていません。システム管理者がそのロールにユーザーを割り当てる必要があります。

重要

db_ssisadmin ロールおよび dc_admin ロールのメンバーは、特権を sysadmin に昇格できる可能性があります。 このような特権の昇格が発生するのは、それらのロールが Integration Services パッケージを変更でき、 Integration Services エージェントの sysadmin セキュリティ コンテキストを使用して SQL Server で SQL Server パッケージを実行できるためです。 メンテナンス プラン、データ コレクション セット、およびその他の Integration Services パッケージの実行時にこの特権の昇格を防ぐには、特権が制限されたプロキシ アカウントを使用するようにパッケージを実行する SQL Server エージェント ジョブを構成するか、 db_ssisadmin ロールおよび dc_admin ロールには sysadmin メンバーのみを追加するようにします。

データベース レベルのロールの操作

次の表では、データベース レベルのロールを操作するためのコマンド、ビュー、および関数について説明します。

機能 Type 説明
sp_helpdbfixedrole (Transact-SQL) Metadata 固定データベース ロールの一覧を返します。
sp_dbfixedrolepermission (Transact-SQL) Metadata 固定データベース ロールの権限を表示します。
sp_helprole (Transact-SQL) Metadata 現在のデータベース内のロールに関する情報を返します。
sp_helprolemember (Transact-SQL) Metadata 現在のデータベースに含まれるロールのメンバーに関する情報を返します。
sys.database_role_members (Transact-SQL) Metadata データベース ロールのメンバーごとに 1 行のデータを返します。
IS_MEMBER (Transact-SQL) Metadata 現在のユーザーが、指定された Microsoft Windows グループまたは Microsoft SQL Server データベース ロールのメンバーであるかどうかを示します。
CREATE ROLE (Transact-SQL) command 現在のデータベースに新しいデータベース ロールを作成します。
ALTER ROLE (Transact-SQL) command データベース ロールの名前またはメンバーシップを変更します。
DROP ROLE (Transact-SQL) command データベースからロールを削除します。
sp_addrole (Transact-SQL) command 現在のデータベースに新しいデータベース ロールを作成します。
sp_droprole (Transact-SQL) command 現在のデータベースからデータベース ロールを削除します。
sp_addrolemember (Transact-SQL) command データベース ユーザー、データベース ロール、Windows ログイン、または Windows グループを、現在のデータベースのデータベース ロールに追加します。 Analytics Platform System (PDW) と Azure Synapse 以外のすべてのプラットフォームでは代わりに ALTER ROLE を使用する必要があります。
sp_droprolemember (Transact-SQL) command 現在のデータベースの SQL Server ロールからセキュリティ アカウントを削除します。 Analytics Platform System (PDW) と Azure Synapse 以外のすべてのプラットフォームでは代わりに ALTER ROLE を使用する必要があります。
GRANT アクセス許可 ロールに権限を追加します。
DENY アクセス許可 ロールに対する権限を拒否します。
REVOKE アクセス許可 以前に許可または拒否した権限を取り消します。

public データベース ロール

データベース ユーザーはすべて、 public データベース ロールに属しています。 セキュリティ保護可能なオブジェクトに対する特定の権限が与えられていないか権限が拒否されているユーザーは、そのオブジェクトに対して public に付与されている権限を継承します。 データベース ユーザーを public ロールから削除することはできません。

使用例

このセクションの例では、データベース レベルのロールを使用する方法が示されています。

A. データベース レベルのロールにユーザーを追加する

次の例では、固定データベース レベルのロール db_datareader にユーザー 'Ben' が追加されます。

ALTER ROLE db_datareader
    ADD MEMBER Ben;  
GO

B. データベース レベルのロールのメンバーであるすべてのデータベース プリンシパルを一覧表示する

次のステートメントでは、任意のデータベース ロールのすべてのメンバーが返されます。

SELECT    roles.principal_id                            AS RolePrincipalID
    ,    roles.name                                    AS RolePrincipalName
    ,    database_role_members.member_principal_id    AS MemberPrincipalID
    ,    members.name                                AS MemberPrincipalName
FROM sys.database_role_members AS database_role_members  
JOIN sys.database_principals AS roles  
    ON database_role_members.role_principal_id = roles.principal_id  
JOIN sys.database_principals AS members  
    ON database_role_members.member_principal_id = members.principal_id;  
GO

セキュリティ カタログ ビュー (Transact-SQL)

セキュリティ ストアド プロシージャ (Transact-SQL)

セキュリティ関数 (Transact-SQL)

SQL Server の保護

sp_helprotect (Transact-SQL)