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

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed InstanceAzure Synapse AnalyticsAnalytics Platform System (PDW)

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

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

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

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

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

ヒント

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

ユーザー定義データベース ロールの権限は、GRANTDENYREVOKE ステートメントを使用してカスタマイズできます。 詳細については、アクセス許可 (データベース エンジン) を参照してください。

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

固定データベース ロール

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

固定データベース ロールの名前 説明
db_owner db_owner 固定データベース ロールのメンバーは、データベースでのすべての構成とメンテナンス作業を実行でき、SQL Server でデータベースを drop することもできます。 (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 db_datareader 固定データベース ロールのメンバーは、すべてのユーザー テーブルとビューからすべてのデータを読み取ることができます。 ユーザーオブジェクトは、sysINFORMATION_SCHEMA を除くどのスキーマにも存在できます。
db_denydatawriter db_denydatawriter 固定データベース ロールのメンバーは、データベース内のユーザー テーブルのデータを追加、変更、または削除することはできません。
db_denydatareader db_denydatareader 固定データベース ロールのメンバーは、データベース内のユーザー テーブルとビューのデータを読み取ることはできません。

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

fixed_database_role_permissions

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

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

ロール名 説明
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 データベースのログインを作成および削除できます。

Note

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

一部のデータベース ロールは Azure SQL または Azure Synapse には適用できません。

  • db_backupoperator は、T-SQL コマンドのバックアップと復元が使用できないため、Azure SQL Database (Azure SQL Managed Instance ではない) と Azure Synapse Analytics サーバーレス プールでは適用できません。
  • db_datawriterdb_denydatawriter は、外部データを読み取るだけなので、Azure Synapse Analytics サーバーレスには適用できません。

msdb ロール

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

msdb ロール名 説明
db_ssisadmin

db_ssisoperator

db_ssisltduser
これらのデータベース ロールのメンバーは、SSIS を管理および使用できます。 以前のバージョンからアップグレードされた SQL Server のインスタンスには、SSIS ではなくデータ変換サービス (DTS) を使用して名前が付けられた古いバージョンのロールが含まれている場合があります。 詳細については、「Integration Services のロール (SSIS Service)」を参照してください。
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 Entra グループ、Microsoft SQL Server データベース ロールのメンバーであるかどうかを示します。
CREATE ROLE (Transact-SQL) コマンド 現在のデータベースに新しいデータベース ロールを作成します。
ALTER ROLE (Transact-SQL) コマンド データベース ロールの名前またはメンバーシップを変更します。
DROP ROLE (Transact-SQL) コマンド データベースからロールを削除します。
sp_addrole (Transact-SQL) コマンド 現在のデータベースに新しいデータベース ロールを作成します。
sp_droprole (Transact-SQL) コマンド 現在のデータベースからデータベース ロールを削除します。
sp_addrolemember (Transact-SQL) コマンド データベース ユーザー、データベース ロール、Windows ログイン、または Windows グループを、現在のデータベースのデータベース ロールに追加します。 Analytics Platform System (PDW) と Azure Synapse を除くすべてのプラットフォームでは、代わりに ALTER ROLE を使用する必要があります。
sp_droprolemember (Transact-SQL) コマンド 現在のデータベースの 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