データベース レベルのロール
適用対象: SQL Server
Azure SQL データベース
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
データベースでアクセス許可を簡単に管理できるように、SQL Server にはいくつかのロールが用意されています。ロールは、他のプリンシパルをグループ化するセキュリティ プリンシパルです。 ロールは、Windows オペレーティング システムの グループ に似ています。 データベース レベルのロールは、その権限のスコープがデータベース全体に及びます。
データベース ロールに対するユーザーの追加および削除を行うには、 ADD MEMBER
ALTER ROLE DROP MEMBER
ステートメントの と のオプションを使用します。 Analytics Platform System (PDW) と Azure Synapse Analytics は、ALTER ROLE
の使用をサポートしていません。 代わりに、以前の sp_addrolemember と sp_droprolemember プロシージャを使用してください。
データベース レベルのロールは 2 種類あります。1 つはデータベースに事前に定義されている 固定データベース ロール、もう 1 つはユーザーが作成できる ユーザー定義データベース ロール です。
固定データベース ロールはデータベース レベルで定義されており、各データベースに存在します。 db_owner データベース ロールのメンバーは、固定データベース ロールのメンバーシップを管理できます。 msdb
データベースには、特別な用途のデータベース ロールもいくつかあります。
データベース レベルのロールには、すべてのデータベース アカウントとその他の SQL Server ロールを追加できます。
ヒント
ユーザー定義データベース ロールは、固定ロールのメンバーとして追加しないでください。 これを行うと、特権が意図せず昇格されることがあります。
ユーザー定義データベース ロールの権限は、GRANT、DENY、REVOKE ステートメントを使用してカスタマイズできます。 詳細については、アクセス許可 (データベース エンジン) を参照してください。
すべての権限の一覧については、 データベース エンジンの権限 ポスターを参照してください。 サーバー レベルの権限をデータベース ロールに付与することはできません。 ログインおよびその他のサーバー レベル プリンシパル (サーバー ロールなど) は、データベース ロールに追加できません。 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 固定データベース ロールのメンバーは、すべてのユーザー テーブルとビューからすべてのデータを読み取ることができます。 ユーザーオブジェクトは、sys と INFORMATION_SCHEMA を除くどのスキーマにも存在できます。 |
db_denydatawriter | db_denydatawriter 固定データベース ロールのメンバーは、データベース内のユーザー テーブルのデータを追加、変更、または削除することはできません。 |
db_denydatareader | db_denydatareader 固定データベース ロールのメンバーは、データベース内のユーザー テーブルとビューのデータを読み取ることはできません。 |
固定データベース ロールに割り当てられている権限を変更することはできません。 次の図表は、固定データベース ロールに割り当てられている権限を示しています:
Azure SQL データベースと Azure Synapse の特別なロール
以下のデータベース ロールは、仮想 master
データベース内にのみ存在します。 その権限は master
で実行されるアクションに制限されます。 これらのロールに追加できるのは、master
のデータベース ユーザーのみです。 これらのロールにログインを追加することはできませんが、ログインに基づいてユーザーを作成してから、そのユーザーをロールに追加することはできます。 これらのロールに、master
の包含データベース ユーザーを追加することもできます。 ただし、master
の dbmanager ロールに追加された包含データベース ユーザーを使用して新しいデータベースを作成することはできません。
ロール名 | 説明 |
---|---|
dbmanager | データベースの作成と削除を行うことができます。 データベースを作成する dbmanager ロールのメンバーは、そのデータベースの所有者になります。これにより、ユーザーは dbo ユーザーとしてそのデータベースに接続できるようになります。 dbo ユーザーには、データベースでのすべてのデータベース権限があります。 dbmanager ロールのメンバーには、所有していないデータベースへのアクセス権が必ずしもあるとは限りません。 |
db_exporter | db_exporter 固定データベース ロールのメンバーは、すべてのデータ エクスポート アクティビティを実行できます。 このロールによって付与されるアクセス許可は、CREATE TABLE 、ALTER ANY SCHEMA 、ALTER ANY EXTERNAL DATA SOURCE 、ALTER ANY EXTERNAL FILE FORMAT です。適用対象: Azure Synapse Analytics 専用 SQL プール (旧称 SQL DW) |
loginmanager | 仮想 master データベースのログインを作成および削除できます。 |
Note
サーバー レベル プリンシパルと Microsoft Entra 管理者 (構成されている場合) には、SQL Database と Azure Synapse Analytics でのすべてのアクセス許可があります。ロールのメンバーである必要はありません。 詳細については、「SQL Database、SQL Managed Instance、Azure Synapse Analytics へのデータベース アクセスを承認する」を参照してください。
一部のデータベース ロールは Azure SQL または Azure Synapse には適用できません。
db_backupoperator は、T-SQL コマンドのバックアップと復元が使用できないため、Azure SQL Database (Azure SQL Managed Instance ではない) と Azure Synapse Analytics サーバーレス プールでは適用できません。
db_datawriter と db_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 |
これらのデータベース ロールのメンバーは、データ コレクターを管理および使用できます。 詳細については、「データ コレクション」を参照してください。 |
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 | Metadata | 固定データベース ロールの一覧を返します。 |
sp_dbfixedrolepermission | Metadata | 固定データベース ロールの権限を表示します。 |
sp_helprole | Metadata | 現在のデータベース内のロールに関する情報を返します。 |
sp_helprolemember | Metadata | 現在のデータベースに含まれるロールのメンバーに関する情報を返します。 |
sys.database_role_members | Metadata | データベース ロールのメンバーごとに 1 行のデータを返します。 |
IS_MEMBER | Metadata | 現在のユーザーが、指定された Microsoft Windows グループ、Microsoft Entra グループ、Microsoft SQL Server データベース ロールのメンバーであるかどうかを示します。 |
CREATE ROLE | command | 現在のデータベースに新しいデータベース ロールを作成します。 |
ALTER ROLE | command | データベース ロールの名前またはメンバーシップを変更します。 |
DROP ROLE | command | データベースからロールを削除します。 |
sp_addrole | command | 現在のデータベースに新しいデータベース ロールを作成します。 |
sp_droprole | command | 現在のデータベースからデータベース ロールを削除します。 |
sp_addrolemember | command | データベース ユーザー、データベース ロール、Windows ログイン、または Windows グループを、現在のデータベースのデータベース ロールに追加します。 Analytics Platform System (PDW) と Azure Synapse を除くすべてのプラットフォームでは、代わりに ALTER ROLE を使用する必要があります。 |
sp_droprolemember | 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
INNER JOIN sys.database_principals AS roles
ON database_role_members.role_principal_id = roles.principal_id
INNER JOIN sys.database_principals AS members
ON database_role_members.member_principal_id = members.principal_id;
GO