適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Microsoft Fabric プレビューの SQL データベース
データベースでアクセス許可を簡単に管理できるように、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 ロールを追加できます。
Tip
ユーザー定義データベース ロールは、固定ロールのメンバーとして追加しないでください。 これを行うと、特権が意図せず昇格されることがあります。
ユーザー定義データベース ロールの権限は、GRANT、DENY、REVOKE ステートメントを使用してカスタマイズできます。 詳細については、アクセス許可 (データベース エンジン) を参照してください。
すべての権限の一覧については、 データベース エンジンの権限 ポスターを参照してください。 サーバー レベルの権限をデータベース ロールに付与することはできません。 ログインおよびその他のサーバー レベル プリンシパル (サーバー ロールなど) は、データベース ロールに追加できません。 SQL Server のサーバー レベルのセキュリティの場合は、代わりにサーバー ロールを使用します。 Azure SQL Database および Azure Synapse Analytics のロールを介してサーバー レベルのアクセス許可を付与することはできません。
固定データベース ロール
次の表に、固定データベース ロールとその機能を示します。 これらのロールは、すべてのデータベースに存在します。 public データベース ロールを除き、固定データベース ロールに割り当てられているアクセス許可を変更することはできません。
固定データベース ロールの名前 | Description |
---|---|
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 固定データベース ロールのメンバーは、データベース内のユーザー テーブルとビューのデータを読み取ることはできません。 このロールのメンバーは、システム ビューの表示など、データベースとそのオブジェクトに関するメタデータも読み取ることはできません。 |
固定データベース ロールに割り当てられている権限を変更することはできません。 すべてのロール ( public
ロールを含む) には CONNECT アクセス許可があります。 次の図表は、固定データベース ロールに割り当てられている権限を示しています:
役割名 | Permissions |
---|---|
db_owner | CONTROL DATABASE: データベース内のすべてのアクセス許可を持ちます。 |
db_securityadmin | 任意のアプリケーション ロールを変更する スキーマを作成 (CREATE SCHEMA) あらゆるロールを変更する ビューの定義 |
db_accessadmin | 任意のユーザーを変更する スキーマを作成 (CREATE SCHEMA) ユーザーを作成する |
db_backupoperator | データベースをバックアップ バックアップ ログ CHECKPOINT |
db_ddladmin | 任意のアセンブリを変更 非対称キーを変更する 任意の証明書を変更する 任意の契約を変更する ALTER ANY DATABASE DDL トリガー 任意のデータベースイベント通知を変更する 任意のデータスペースを変更する 任意の外部ライブラリを変更する 任意のフルテキストカタログを変更 任意のメッセージ型を変更する 任意のリモートサービスバインディングを変更する 任意のルートを変更 任意のスキーマを変更する 任意のサービスを変更する 対称鍵の変更可能 CHECKPOINT 集計関数を作成する アセンブリを作成 非対称キーを作成する 証明書の作成 契約を作成 データベースDDLイベント通知の作成 デフォルトを作成する 外部ライブラリを作成する フルテキスト カタログの作成 CREATE 関数 メッセージの種類を作成する プロシージャを作成 キューを作成 リモート サービス バインディングを作成する ルートを作成 ルールを作成 スキーマを作成 (CREATE SCHEMA) サービスを作成 対称キーの作成 シノニムの作成 CREATE TABLE タイプの作成 ビューを作成 XML スキーマ コレクションの作成 参照 適用対象: SQL Server 2019 以降 任意の外部言語を変更する 外部言語を作成 適用対象: SQL Server 2022 以降 すべての外部データ ソースを変更します。 任意の外部のファイル形式を変更します。 ALTER ANY EXTERNAL JOB(任意の外部ジョブを変更) 任意の外部ストリームを変更する ALTER LEDGER 台帳を有効にする |
db_datareader | GRANT SELECT ON DATABASE::<database-name> |
db_denydatareader | データベースに対するSELECTを拒否::<database-name> |
db_datawriter | GRANT INSERT ON DATABASE::<database-name> GRANT UPDATE ON DATABASE:: <database-name> GRANT DELETE ON DATABASE:: <database-name> |
db_denydatawriter | DENY INSERT ON DATABASE::<database-name> DENY UPDATE ON DATABASE:: <database-name> データベースに対する削除を拒否:: <database-name> |
public | パブリック データベース ロールに固有のデータベース レベルのアクセス許可はありません。 ただし、一部のデータベース権限は既定で存在します。 具体的には、すべての列暗号化キー定義を表示し、列マスターキー定義を表示し、多数の個々のシステムテーブルでSELECT権限を持つことです。 これらのアクセス許可は取り消すことができます。 |
Azure SQL データベースと Azure Synapse の特別なロール
以下のデータベース ロールは、仮想 master
データベース内にのみ存在します。 その権限は master
で実行されるアクションに制限されます。 これらのロールに追加できるのは、master
のデータベース ユーザーのみです。 これらのロールにログインを追加することはできませんが、ログインに基づいてユーザーを作成してから、そのユーザーをロールに追加することはできます。 これらのロールに、master
の包含データベース ユーザーを追加することもできます。 ただし、 の master
ロールに追加された包含データベース ユーザーを使用して新しいデータベースを作成することはできません。
役割名 | Description |
---|---|
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 ロール名 |
Description |
---|---|
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 メンバーのみを追加するようにします。
データベース レベルのロールと連携する
次の表では、データベース レベルのロールを操作するためのコマンド、ビュー、関数について説明します。
Feature | タイプ | Description |
---|---|---|
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 データベース ロールのメンバーであるかどうかを示します。 |
ロールの作成 | 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 | Permissions | ロールに権限を追加します。 |
DENY | Permissions | ロールに対する権限を拒否します。 |
REVOKE | Permissions | 以前に許可または拒否された権限を削除します。 |
public データベース ロール
データベース ユーザーはすべて、 public データベース ロールに属しています。 ユーザーに、セキュリティ保護可能なオブジェクトに対する特定の権限が与えられていないか拒否されている場合、ユーザーは、そのオブジェクトに対して public に付与されている権限を継承します。 データベース ユーザーを public ロールから削除することはできません。
Examples
このセクションの例では、データベース レベルのロールを使用する方法が示されています。
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