CREATE ROLE
目的
CREATE
ROLE
文を使用すると、ロールを作成できます。ロールは、ユーザーまたは他のロールに付与できる権限の集合です。ロールを使用して、データベース権限を管理できます。ロールに権限を追加し、そのロールをユーザーに付与することができます。その後、ユーザーはロールを有効にして、そのロールによって付与された権限を行使することができます。
ロールには、そのロールに付与されたすべての権限、およびそのロールに付与された他のロールのすべての権限が含まれています。新しく作成されたロールには、ロールや権限は付与されていません。GRANT
文を使用して、ロールに様々な権限を追加します。
NOT
IDENTIFIED
、IDENTIFIED
EXTERNALLY
またはBY
password
ロールを作成した場合、そのロールはADMIN
OPTION
付きで付与されます。ただし、ロールIDENTIFIED
GLOBALLY
を作成した場合、ロールは付与されません。グローバル・ロールは、ユーザーまたはロールに対して直接付与できません。グローバル・ロールは、EUSエンタープライズ・ロール、マップされたグループ・メンバーシップおよびマップされたアプリケーション・ロールを介して付与できます。
関連項目:
-
ロールの付与については、「GRANT」を参照してください。
-
ロールを使用可能にする場合は、「ALTER USER」を参照してください。
-
データベースのロールの変更または削除については、「ALTER ROLE」および「DROP ROLE」を参照してください。
-
現行のセッションに対するロールの使用可能化および使用禁止化については、「SET ROLE」を参照してください。
-
ロールの概要は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
-
エンタープライズ・ロールの詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。
前提条件
CREATE
ROLE
システム権限が必要です。
CONTAINER
句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER
=
ALL
を指定する場合は、現在のコンテナがルートである必要があります。CONTAINER
=
CURRENT
を指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。
構文
create_role::=
セマンティクス
role
作成するロールの名前を指定します。名前は、「データベース・オブジェクトのネーミング規則」に指定されている要件を満たしている必要があります。データベース文字セットにマルチバイト文字がサポートされている場合でも、ロールにはシングルバイト文字を1つ以上使用することをお薦めします。ロールの名前の最大長は128バイトです。各ユーザーに対し、一度に使用可能にできるユーザー定義のロールの最大数は148です。
CDB以外では、ロール名の先頭をC##
またはc##
にできません。
ノート:
マルチテナント・コンテナ・データベースが、Oracle Database 21c以降のリリースで唯一サポートされているアーキテクチャです。ドキュメントが改訂されている間は、従来の用語が残っている可能性があります。ほとんどの場合、「データベース」と「非CDB」は、コンテキストに応じてCDBまたはPDBを指しています。アップグレードなどのコンテキストでは、「非CDB」が以前のリリースの非CDBを指す場合もあります。
CDBでは、ロール名の要件は次のとおりです。
-
共通ロールの名前は、
COMMON_USER_PREFIX
初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始める必要があります。デフォルトでは、接頭辞はC##
です。 -
ローカル・ロールの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から
始めないでください
。COMMON_USER_PREFIX
の値に関係なく、ローカル・ロールの名前の先頭にC##
またはc##
を使用できません。
ノート:
COMMON_USER_PREFIX
の値が空の文字列である場合、共通またはローカル・ロール名に要件はありませんが、次の1つの例外があります。ローカル・ロールの名前の先頭にC##
またはc##
を使用できません。PDBを別のCDBに接続する場合または共通ユーザーの作成時に閉じられたPDBを開く場合、ローカルおよび共通ロールの名前が競合する可能性があるため、空の文字列を使用しないことをお薦めします。
配布メディアで提供されているSQLスクリプトには、いくつかのロールが定義されています。
関連項目:
事前定義済のロールのリストについては、「GRANT」を、ユーザーに対するロールの使用可能化および使用禁止化については、「SET ROLE」を参照してください。
BY password
BY
password
句を使用して、パスワードを持つローカル・ロールを作成できます。つまり、ロールを有効にするときに、データベースにパスワードを指定する必要があるということです。
パスワードには、NULL
文字(CHR(0))
と二重引用符を除いて、データベース文字セットの任意の文字を含めることができます。パスワードの最大長は、1024バイトです。パスワードは構文上は識別子であり、データベース・オブジェクトのネーミング規則で指定されているとおり、二重引用符で囲む必要があります。データベースと、ロールを有効化する必要があるクライアントは、パスワードを構成するすべての文字をサポートするように構成されている必要があります。
プロキシ・セッションで、パスワード保護されたロールを有効にできます。セキュア・アプリケーション・ロールでも、パスワード保護されたロールでも、セッションでロールを有効にする安全な方法があります。 安全でないチャネルでパスワードを管理、転送しなければならない場合には、または複数の担当者がパスワードを知る必要がある場合には、パスワード保護されたロールではなく、セキュア・パスワード・ロールを使用することをお薦めします。プロキシ・セッションの場合、パスワード保護されたロールは、自動化処理を利用してロールを設定する状況に適しています。
USING package
USING
package
句を使用すると、保護アプリケーション・ロールを作成できます。保護アプリケーション・ロールとは、認可済パッケージを使用するアプリケーションによってのみ有効にできるロールです。schema
を指定しない場合、パッケージは自分のスキーマ内にあるとみなされます。
関連項目:
保護アプリケーション・ロールの作成については、『Oracle Databaseセキュリティ・ガイド』を参照してください。
EXTERNALLY
EXTERNALLY
を指定すると、外部ロールを作成できます。外部ユーザーは、ロールを使用可能にする前に、オペレーティング・システムやサード・パーティ・サービスなどの外部サービスによって認可されている必要があります。
オペレーティング・システムによっては、ユーザーがオペレーティング・システムに対してパスワードを指定しないと、ロールが使用可能にできない場合もあります。
GLOBALLY
GLOBALLY
を指定すると、グローバル・ロールを作成できます グローバル・ユーザーは、ログイン時にロールの使用が可能になる前に、エンタープライズ・ディレクトリ・サービスによってロールの使用を認可されている必要があります。
中央管理されているユーザーを使用している場合、GLOBALLY
をAS
とともに指定して、ディレクトリ・グループをグローバル・ロールにマップします。ディレクトリ・グループはそのドメイン名によって識別されます。
例: グローバル・ユーザーへのディレクトリ・ユーザーのマッピング
CREATE USER scott_global IDENTIFIED GLOBALLY AS ‘cn=scott taylor,ou=sales,dc=abccorp,dc=com’;
これは実質的に、abccorp.comドメインのsales組織単位のscott taylorという名前のディレクトリ・ユーザーを、データベース・グローバル・ユーザーscott_globalに割り当てます。
Oracle Databaseグローバル・ロールをAzureアプリケーション・ロールにマップして、Azureのユーザーおよびアプリケーションに、ログイン・スキーマを介して付与された権限およびロールを超える権限およびロールを付与できます。
例: アプリケーション・ロールへのOracle Databaseグローバル・ロールのマッピング
この例では、新しいデータベース・グローバル・ロールwidget_sales_role
を作成し、既存のAzure ADアプリケーション・ロールWidgetManagerGroup
にマップします。
CREATE ROLE widget_sales_role IDENTIFIED GLOBALLY AS 'AZURE_ROLE=WidgetManagerGroup';
CONTAINER句
CONTAINER
句は、CDBに接続しているときに適用されます。ただし、デフォルト値が使用できる唯一の値であるため、CONTAINER
句を指定する必要はありません。
-
共通ロールを作成するには、ルートに接続する必要があります。ルートに接続する場合にデフォルトの
CONTAINER
=
ALL
をオプションで指定できます。 -
ローカル・ロールを作成するには、PDBに接続する必要があります。PDBに接続する場合にデフォルトの
CONTAINER
=
CURRENT
をオプションで指定できます。
例
ロールの作成: 例
次の文は、ロールdw_manager
を作成します。
CREATE ROLE dw_manager;
この後にdw_manager
ロールを付与されるユーザーは、このロールに付与されているすべての権限を継承します。
次の例のように、パスワードの指定によってロールにセキュリティのレイヤーを追加できます。
CREATE ROLE dw_manager IDENTIFIED BY warehouse;
この後、dw_manager
ロールを付与されたユーザーは、パスワードwarehouse
を指定して、SET
ROLE
文でロールを使用可能にする必要があります。
次の文は、グローバル・ロールwarehouse_user
を作成します。
CREATE ROLE warehouse_user IDENTIFIED GLOBALLY;
次の文は、同じロールを外部ロールとして作成します。
CREATE ROLE warehouse_user IDENTIFIED EXTERNALLY;
次の文は、現在のPDBにローカル・ロールrole1
を作成します。この文を発行するときには、現在のコンテナがPDBである必要があります。
CREATE ROLE role1 CONTAINER = CURRENT;
次の文では、共通ロールc##role1
を作成します。この文を発行するときには、現在のコンテナがルートである必要があります。
CREATE ROLE c##role1 CONTAINER = ALL;