用途
CREATE ROLE文を使用すると、ロールを作成できます。ロールは、ユーザーまたは他のロールに付与できる権限の集合です。ロールを使用して、データベース権限を管理できます。ロールに権限を追加し、そのロールをユーザーに付与することができます。その後、ユーザーはロールを有効にして、そのロールによって付与された権限を行使することができます。
ロールには、そのロールに付与されたすべての権限、およびそのロールに付与された他のロールのすべての権限が含まれています。新しく作成されたロールには、ロールや権限は付与されていません。GRANT文を使用して、ロールに様々な権限を追加します。
NOT IDENTIFIED、IDENTIFIED EXTERNALLYまたはBY passwordロールを作成した場合、そのロールはADMIN OPTION付きで付与されます。ただし、ロールIDENTIFIED GLOBALLYを作成した場合、ロールは付与されません。グローバル・ロールは、ユーザーまたはロールに対して直接付与できません。グローバル・ロールを付与する場合は、エンタープライズ・ロールを介して行う必要があります。
|
関連項目:
|
前提条件
CREATE ROLEシステム権限が必要です。
CONTAINER句を指定する場合は、マルチテナント・コンテナ・データベース(CDB)に接続している必要があります。CONTAINER = ALLを指定する場合は、現在のコンテナがルートである必要があります。CONTAINER = CURRENTを指定するには、現在のコンテナがプラガブル・データベース(PDB)である必要があります。
セマンティクス
role
作成するロールの名前を指定します。データベース・キャラクタ・セットにマルチバイト文字がサポートされている場合でも、ロールにはシングルバイト文字を1つ以上使用することをお薦めします。ロールの名前の最大長は30バイトです。各ユーザーに対し、一度に使用可能にできるユーザー定義のロールの最大数は148です。
CDB以外では、ロール名の先頭をC##またはc##にできません。
CDBでは、ロール名の要件は次のとおりです。
Oracle Database 12cリリース1(12.1.0.1)では、共通ロールの名前は、C##またはc##から始める必要があり、ローカル・ロールの名前は、C##またはc##から始めないでください。
Oracle Database 12cリリース1(12.1.0.2)以降:
共通ロールの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始める必要があります。デフォルトでは、接頭辞はC##です。
ローカル・ロールの名前は、COMMON_USER_PREFIX初期化パラメータで指定された接頭辞と大/小文字を区別しないで一致する文字から始めないでください。COMMON_USER_PREFIXの値に関係なく、ローカル・ロールの名前の先頭にC##またはc##を使用できません。
|
注意: COMMON_USER_PREFIXの値が空の文字列である場合、共通またはローカル・ロール名に要件はありませんが、次の1つの例外があります。ローカル・ロールの名前の先頭にC##またはc##を使用できません。PDBを別のCDBに接続する場合または共通ユーザーの作成時に閉じられたPDBを開く場合、ローカルおよび共通ロールの名前が競合する可能性があるため、空の文字列を使用しないことをお薦めします。 |
配布メディアで提供されているSQLスクリプトには、いくつかのロールが定義されています。
NOT IDENTIFIEDを指定すると、指定するロールがデータベースによって認可され、パスワードを入力しなくてもこのロールを使用可能にできます。
IDENTIFIED句を使用すると、SET ROLE文によってロールを使用可能にする前に、指定したメソッドによってユーザーが認可される必要があります。
BY password BY password句を使用すると、ローカル・ロールを作成できます。また、ロールを使用可能にするときに、データベースに対するパスワードの指定を要求できます。データベース・キャラクタ・セットにマルチバイト文字が含まれている場合でも、データベース・キャラクタ・セットのシングルバイト文字のみでパスワードを指定できます。
USING package USING package句を使用すると、保護アプリケーション・ロールを作成できます。保護アプリケーション・ロールとは、認可済パッケージを使用するアプリケーションによってのみ使用可能になるロールです。schemaを指定しない場合、パッケージは自分のスキーマ内にあるとみなされます。
|
関連項目: 保護アプリケーション・ロールの作成については、『Oracle Databaseセキュリティ・ガイド』を参照してください。 |
EXTERNALLY EXTERNALLYを指定すると、外部ロールを作成できます。外部ユーザーは、ロールを使用可能にする前に、オペレーティング・システムやサード・パーティ・サービスなどの外部サービスによって認可されている必要があります。
オペレーティング・システムによっては、ユーザーがオペレーティング・システムに対してパスワードを指定しないと、ロールが使用可能にできない場合もあります。
GLOBALLY GLOBALLYを指定すると、グローバル・ロールを作成できます。グローバル・ユーザーは、ログイン時にロールの使用が可能になる前に、エンタープライズ・ディレクトリ・サービスによってロールの使用を認可されている必要があります。
NOT IDENTIFIED句およびIDENTIFIED句を両方とも省略した場合、ロールにはNOT IDENTIFIEDがデフォルト値として使用されます。
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;