4 権限とロール認可の構成
権限とロールの認可によって、ユーザーが毎日のタスクを実行するために保持する権限が制御されます。
- 権限とロールについて
認可とは、データへのアクセス、処理または変更を特定のユーザーに許可するほか、ユーザーのアクセスやアクションに関する制限を作成するものです。 - CDBにおける権限およびロールの付与
CDBにおける権限およびロールの付与の範囲は、ロールが使用されている場所によって異なります。 - 権限付与の対象者
権限をユーザーに付与すると、そのユーザーはそれぞれの業務に必要な作業を実行できます。 - Oracleマルチテナント・オプションが権限に影響を与えるしくみ
共通ユーザーを含め、すべてのユーザーは、現在のコンテナ内でのみ権限を行使できます。 - 管理権限の管理
一般的なデータベース操作と特定のデータベース操作の両方に管理権限を使用できます。 - システム権限の管理
スキーマ・オブジェクトに対するアクションを実行するには、適切なシステム権限が付与されている必要があります。 - 診断を有効にする権限の管理
SYSDBA管理権限またはENABLE_DIAGNOSTICSシステム権限を持つユーザーのみが診断を有効にできるようにすることができます。 - 共通およびローカルに付与される権限の管理
権限は、CDBまたはアプリケーション・コンテナの全体に共通に付与するか、特定のPDBに対してローカルに付与することができます。 - 共通ロールおよびローカル・ロールの管理
共通ロールはルートで作成されるロールであり、ローカル・ロールはPDBで作成されます。 - ユーザー・ロールの管理
ユーザー・ロールは、作成したり他のユーザーに割り当てることができる権限の名前付きコレクションです。 - PDBロックダウン・プロファイルを使用したPDBでの操作の制限
PDBロックダウン・プロファイルを使用して、プラガブル・データベース(PDB)での一連のユーザー操作を制限できます。 - オブジェクト権限の管理
オブジェクト権限を使用すると、表や索引などのスキーマ・オブジェクトに対するアクションを実行できます。 - 表権限
表に対するオブジェクト権限は、DMLまたはDDLレベルの操作に対する表セキュリティを実現します。 - ビューに対する権限
DMLオブジェクト権限は、表の場合と同様にビューに対しても適用できます。 - プロシージャ権限
EXECUTE権限は、スタンドアロンまたはパッケージ内でのプロシージャまたは関数の実行をユーザーに許可します。 - タイプ権限
型、メソッドおよびオブジェクトについて、システム権限とオブジェクト権限を制御できます。 - ユーザーへの権限とロールの付与
GRANT文は、プロシージャの実行など、特定のアクションを実行する権限をユーザーに付与します。 - ユーザーからの権限とロールの取消し
システムまたはオブジェクトの権限を取り消す場合は、権限の取消しによる連鎖的な影響に注意してください。 - PUBLICロールに対する権限の付与と取消し
ロールPUBLICに対して、権限とロールの付与および取消しを実行できます。 - オペレーティング・システムまたはネットワークを使用したロールの付与
オペレーティング・システムまたはネットワークを使用してロールを管理すると、大規模エンタープライズでのロールの一元管理が容易になります。 - SET ROLEおよびデフォルト・ロールの設定による権限の付与と取消しの機能
権限付与およびSET ROLE文は、付与と取消しが適用されるタイミングと方法に影響します。 - ユーザー権限およびロールのデータ・ディクショナリ・ビュー
特別な問合せを使用して、様々なタイプの権限およびロール付与に関する情報を入手できます。
親トピック: ユーザー認証および認可の管理
権限とロールについて
認可とは、データへのアクセス、処理または変更を特定のユーザーに許可するほか、ユーザーのアクセスやアクションに関する制限を作成するものです。
ユーザーに対して課せられる(または除外される)制限は、スキーマ、表全体または表の行などのオブジェクトに適用できます。
ユーザー権限とは、特定タイプのSQL文を実行する権利、別のユーザーのオブジェクトにアクセスする権利、PL/SQLパッケージを実行する権利などを指します。権限のタイプは、Oracle Databaseによって定義されています。
ロールは、ユーザー(通常は管理者)が権限や他のロールをグループ化するために作成します。ロールを使用すると、複数の権限またはロールをユーザーに簡単に付与できます。
権限は、次の一般的なカテゴリに分類されます。
-
システム権限。この権限の受領者は、データベースで標準的な管理作業を実行できます。権限受領者は信頼できるユーザーのみに制限してください。権限について説明している次の項を参照してください。
-
ロール。ロールでは、複数の権限やロールがグループ化されるため、複数のユーザーに対して権限を同時に付与したり、取り消すことができます。ユーザーによるロールの使用を可能にするには、そのユーザーに対してロールを使用可能にしておく必要があります。詳細は、次の各項を参照してください。
-
オブジェクト権限。オブジェクトの各タイプには、オブジェクト権限が対応付けられています。異なるタイプのオブジェクト権限を管理する方法は、オブジェクト権限の管理を参照してください。
-
表権限。これらの権限によって、DML (データ操作言語)またはDDL (データ定義言語)レベルでセキュリティが有効になります。表権限の管理方法の詳細は、表権限を参照してください。
-
表示権限。DMLオブジェクト権限は、表の場合と同様にビューに対しても適用できます。詳細は、ビューに対する権限を参照してください。
-
プロシージャ権限。スタンドアロン・プロシージャ、ファンクションを含め、プロシージャには
EXECUTE権限を付与できます。詳細は、プロシージャ権限を参照してください。 -
タイプ権限。システム権限は名前付きタイプ(オブジェクト・タイプ、
VARRAYおよびネストした表)に付与できます。詳細は、タイプ権限を参照してください。
関連項目:
権限の使用を分析するポリシーの作成方法の詳細は、『Oracle Database Vault管理者ガイド』を参照してください。親トピック: 権限とロール認可の構成
CDBにおける権限およびロールの付与
CDBにおける権限およびロールの付与の範囲は、ロールが使用されている場所によって異なります。
- CDBにおける権限およびロールの付与について
CDB内のユーザー・アカウントが、ロールおよび権限を付与および受領できます。ただし、CDB内のロールおよび権限は、ローカルに付与されたものか、共通に付与されたもののいずれかです。 - CDBにおける権限およびロールの付与の原則
CDBでは、付与の行為は、ローカルであろうと共通であろうと、どれも特定のコンテナ内で起こります。コンテナはCDBルート、アプリケーション・ルートまたはPDBになります。 - CDBでローカルに付与される権限およびロール
ロールおよび権限は、受領者、付与者または付与されるロールがローカルか共通かに関係なく、ユーザーおよびロールにローカルに付与できます。 - ロールまたは権限がローカルに付与される条件
ロールまたは権限をローカルに付与するには、CONTAINER=CURRENT句(デフォルト)を含むGRANT文を使用します。 - ローカルに付与されるロールおよび権限
ユーザーまたはロールは、ローカルに付与された権限である可能性があります(CONTAINER=CURRENT)。 - CDBで共通に付与されるロールおよび権限
権限および共通ロールは、共通に付与される可能性があります。 - 付与が共通になる条件
CONTAINER=ALL句は、権限またはロールが共通に付与されることを指定します。 - 共通に付与されるロールおよび権限
共通ユーザー・アカウントまたはロールには、権限を共通に付与できます(CONTAINER=ALL)。 - CDBでのPUBLICへの付与
CDBでは、PUBLICは共通ロールです。PDBでは、PUBLICに対してローカルに付与された権限により、すべてのローカルおよび共通ユーザー・アカウントがこのPDBでのみこれらの権限を実行できるようになります。 - 権限およびロールの付与: シナリオ
このシナリオでは、SYSTEMは共通ユーザーc##dbaを作成し、hrpdbのhrスキーマで表を問い合せるためにこのユーザー権限を付与しようとします。
親トピック: 権限とロール認可の構成
CDBでの権限およびロール付与について
CDBのユーザー・アカウントは、ロールおよび権限を付与したり、付与されたりできます。ただし、CDB内のロールおよび権限は、ローカルに付与されたものか、共通に付与されたもののいずれかです。
ローカルに付与された権限またはロールは、それが付与されたPDBでのみ実行可能です。共通に付与された権限またはロールは、付与された対象のコンテナ(CDBまたはアプリケーション・コンテナ)の既存および将来のどのPDBにおいても実行可能です。
ユーザーおよびロールは、共通の場合もローカルの場合もあります。ただし、権限は、それ自体は共通でもローカルでもありません。ユーザーがCONTAINER=CURRENT句を使用してローカルに権限を付与した場合、権限受領者は現行コンテナ内でのみ実行可能な権限を持ちます。ユーザーがCDBルートまたはアプリケーション・ルートのいずれかに接続している場合、そしてこのユーザーがCONTAINER=ALL句を使用して共通に権限を付与した場合、権限受領者は現在のコンテナ内の既存または将来のPDBでこの権限を持ちます。
親トピック: CDBにおける権限およびロールの付与
CDBにおける権限およびロールの付与の原則
CDBでは、付与の行為は、ローカルか共通かに関係なく、すべてコンテナの内部で起こります。コンテナはCDBルート、アプリケーション・ルートまたはPDBになります。
現在のコンテナがCDBルートの場合、共通に付与することはCDBのすべてのコンテナに付与することを意味します。しかし、現在のコンテナがアプリケーション・ルートの場合、共通に付与することは現在のアプリケーション・コンテナのすべてのPDBに付与することを意味します。
付与の基本原則は、次のとおりです。
-
共通およびローカルのどちらの現象も、ローカルに付与および受領できます。
-
共通に付与または受領できるのは、共通の現象のみです。
ローカルのユーザー、ロールおよび権限は、特定のPDBに制限されます。したがって、ローカル・ユーザーは、共通のロールおよび権限を付与することはできず、ローカルのロールおよび権限は共通に付与されることはありません。
次の各項では、前述の原則の意味を説明します。
親トピック: CDBにおける権限およびロールの付与
CDBでローカルに付与される権限およびロール
ロールおよび権限は、受領者、付与者または付与されるロールがローカルか共通かに関係なく、ユーザーおよびロールにローカルに付与できます。
次の表では、ローカルに付与されたロールおよび権限の有効な可能性について説明します。
表4-1 ローカルな付与
| 現象 | ローカルな付与が可能 | ローカルな受領が可能 | ローカルに付与されたロールまたは権限の受領が可能 |
|---|---|---|---|
|
共通ユーザー |
はい |
なし |
はい |
|
ローカル・ユーザー |
はい |
なし |
はい |
|
共通ロール |
なし |
はい脚注1 |
はい |
|
ローカル・ロール |
なし |
はい脚注2 |
はい |
|
権限 |
なし |
はい |
なし |
脚注1
このロールでの権限は、権限がロールにローカルに付与されたか共通に付与されたかに関係なく、被付与者にとってロールが付与されたコンテナでのみ使用可能です。
脚注2
このロールでの権限は、被付与者にとってロールが付与され作成されたコンテナでのみ使用可能です。
親トピック: CDBにおける権限およびロールの付与
ロールまたは権限がローカルに付与される条件
ロールまたは権限をローカルに付与するには、CONTAINER=CURRENT句(デフォルト)を含むGRANT文を使用します。
具体的には、次の条件を満たした場合にのみ、ロールまたは権限がローカルに付与されます。
-
付与者に、指定したロールまたは権限を付与するために必要な権限がある。
システム・ロールまたは権限の場合、付与者には付与するロールまたは権限に対する
ADMIN OPTIONが必要です。オブジェクト権限の場合、付与者には付与する権限に対するGRANT OPTIONが必要です。 -
付与は1つのコンテナに対してのみ適用される。
GRANT文には、権限またはロールがローカルに付与されることを示すCONTAINER=CURRENT句がデフォルトで含まれています。
例4-1 ローカルでの権限の付与
この例で、SYSTEMおよびc##hr_adminは両方とも共通ユーザーです。この例ではSYSTEM(管理者権限を持つ)としてhrpdbに接続し、employees表での読取り権限をローカルにc##hr_adminに付与します。この付与は、他のPDB内ではなくhrpdb内のc##hr_adminのみに適用されます。
CONNECT SYSTEM@hrpdb
Enter password: password
Connected.
GRANT READ ON employees TO c##hr_admin CONTAINER=CURRENT;
親トピック: CDBにおける権限およびロールの付与
ローカルに付与されるロールおよび権限
ユーザーまたはロールは、ローカルに付与された権限である可能性があります(CONTAINER=CURRENT)。
たとえば、hrpdbのローカルまたは共通ユーザーに対してローカルに付与されたREAD ANY TABLE権限は、この PDB内のこのユーザーに対してのみ適用されます。
ユーザーまたはロールは、ローカルに付与されたロールである可能性があります(CONTAINER=CURRENT)。共通ロールが、ローカルに付与された権限を受領できます。たとえば、共通ロールc##dbaは、hrpdbでREAD ANY TABLE権限をローカルに付与される可能性があります。c##cdb共通ロールにローカルな権限がある場合、それらの権限はロールの付与先のコンテナでのみ適用されます。この例では、c##cdbaロールを持つ共通ユーザーは、権限がこのロールに対してhrpdbでローカルに付与されたものであるため、この権限をhrpdb以外のどのPDBでも実行する権利はありません。
親トピック: CDBにおける権限およびロールの付与
CDBで共通に付与されるロールおよび権限
権限および共通ロールは、共通に付与される可能性があります。
ユーザー・アカウントまたはロールに対してロールおよび権限を共通に付与できるのは、権限受領者と権限付与者がどちらも共通である場合のみです。ロールを共通に付与する場合は、そのロール自体が共通である必要があります。次の表では、共通の付与の可能性について説明します。
表4-2 共通の付与
| 現象 | 共通の付与が可能 | 共通の受領が可能 | 共通に付与されたロールおよび権限の受領が可能 |
|---|---|---|---|
|
共通ユーザー・アカウント |
はい |
なし |
はい |
|
ローカル・ユーザー・アカウント |
いいえ |
なし |
いいえ |
|
共通ロール |
なし |
はい脚注3 |
はい |
|
ローカル・ロール |
なし |
いいえ |
いいえ |
|
権限 |
なし |
はい |
なし |
脚注3
共通ロールに共通に付与された権限は、すべてのコンテナで被付与者が使用できます。さらに、共通ロールに対してローカルに付与された権限はどれも、その権限が共通ロールに付与されたコンテナでのみ、被付与者が使用できます。
親トピック: CDBにおける権限およびロールの付与
付与が共通になる条件
CONTAINER=ALL句は、権限またはロールが共通に付与されることを指定します。
ロールまたは権限は、次の条件を満たしたとき、共通に付与されます。
-
付与者は、共通ユーザーである。
付与を実行するユーザーは、CDB自体または特定のアプリケーション・コンテナのいずれかに共通します。
-
被付与者は、共通ユーザーまたは共通ロールである。
付与の受領者は、CDB自体または特定のアプリケーション・コンテナのいずれかに共通します。
-
付与者に、指定したロールまたは権限を付与するために必要な権限がある。
システム・ロールまたは権限の場合、付与者には付与するロールまたは権限に対する
ADMIN OPTIONが必要です。オブジェクト権限の場合、付与者には付与する権限に対するGRANT OPTIONが必要です。 -
付与は、付与が発生したコンテナ(CDBまたはアプリケーション・コンテナのいずれか)内のすべてのPDBに適用されます。
GRANT文には、権限またはロールが共通に付与されることを指定するCONTAINER=ALL句が含まれます。 -
ロールが付与される場合、それは共通であり、オブジェクト権限が付与される場合は、権限が付与される対象のオブジェクトが共通であることが必要。
例4-2 共通での権限の付与
この例で、SYSTEMおよびc##hr_adminは両方とも共通ユーザーです。SYSTEMはCDBルートに接続して、CREATE ANY TABLE権限をc##hr_adminに共通に付与します。この場合、c##hr_adminはCDBのどのPDBにも表を作成できるようになります。
CONNECT SYSTEM@root
Enter password: password
Connected.
GRANT CREATE ANY TABLE TO c##hr_admin CONTAINER=ALL;
親トピック: CDBにおける権限およびロールの付与
共通に付与されるロールおよび権限
共通ユーザー・アカウントまたはロールには、権限を共通に付与できます(CONTAINER=ALL)。
CDBルートまたはアプリケーション・ルートのいずれかのコンテキスト内で、現在のコンテナ内の既存および将来のすべてのPDBにおいて、権限がこの共通ユーザー・アカウントまたはロールに付与されます。たとえば、SYSTEMがCDBルートに接続して、SELECT ANY TABLE権限をCDB共通ユーザー・アカウントc##dbaに共通に付与した場合、ユーザーc##dbaはCDBのすべてのPDBでこの権限を保持します。共通に付与されたロールまたは権限をローカルに取り消すことはできません。
ユーザーまたはロールは、共通に付与された共通ロールを受領する可能性があります。共通ロールが、ローカルに付与された権限を受領できます。したがって、共通ユーザーには共通ロールを付与でき、このロールにはローカルに付与された権限が含まれる可能性があります。
たとえば、共通ロールc##adminは、hrpdbに対してローカルなSELECT ANY TABLE権限を付与される可能性があります。共通ロールでローカルに付与された権限は、その権限が付与されたコンテナでのみ適用されます。したがって、c##adminロールを持つ共通ユーザーには、salespdbまたはhrpdb以外のどのPDBでも、hrpdbに含まれる権限を実行する権利はありません。
親トピック: CDBにおける権限およびロールの付与
CDBでのPUBLICへの付与
CDBでは、PUBLICは共通ロールです。PDBでは、PUBLICに対してローカルに付与された権限により、すべてのローカルおよび共通ユーザー・アカウントがこのPDBでのみこれらの権限を実行できるようになります。
Oracle提供のユーザーおよびロールに付与される権限およびロールはいずれも共通に付与されますが、PUBLICに付与されるシステム権限のみはローカルに付与されます。この例外は、Oracle Databaseにデフォルトで含まれている一部の付与(SYS.UTL_FILEに対するEXECUTEなど)を取り消すことができるように設けられています。
ローカル・ユーザー・アカウントhrがhrpdbに存在するとします。このユーザーは、hr.employeesでのSELECT権限を、PUBLICに対してローカルに付与します。hrpdbの共通およびローカル・ユーザーは、PUBLICに付与された権限を実行できます。salespdbまたはその他のPDBのユーザー・アカウントには、hrpdbでhr.employeesを問い合せる権限はありません。
PUBLICに対して共通に付与され権限により、すべてのローカル・ユーザーは、それぞれのPDBで付与された権限を実行でき、すべての共通ユーザーは、アクセス権限を持つPDBでこの権限を実行できます。ユーザーは、PUBLICに対しては、権限およびロールを共通に付与しないことをお薦めします。
親トピック: CDBにおける権限およびロールの付与
権限およびロールの付与: シナリオ
このシナリオでは、SYSTEMは共通ユーザーc##dbaを作成し、hrpdbのhrスキーマで表を問い合せるためにこのユーザー権限を付与しようとします。
このシナリオは、CONTAINER句がロールおよび権限の付与にどのような影響を与えるかを示しています。最初の列には、CDB$ROOTでの操作が示されています。2番目の列には、hrpdbでの操作が示されています。
表4-3 CDBのロールおよび権限の付与
| t | CDB$ROOTでの操作 | hrpdbでの操作 | 説明 |
|---|---|---|---|
|
t1 |
|
なし |
共通ユーザー |
|
t2 |
|
なし |
|
|
t3 |
|
なし |
|
|
t4 |
|
なし |
|
|
t5 |
|
なし |
|
|
t6 |
|
なし |
|
|
t7 |
なし |
|
|
|
t8 |
なし |
|
|
|
t9 |
なし |
|
|
|
t10 |
なし |
|
共通ユーザー |
|
t11 |
なし |
|
|
|
t12 |
|
なし |
共通ユーザー |
|
t13 |
|
なし |
|
|
t14 |
なし |
|
|
|
t15 |
|
なし |
|
|
t17 |
なし |
|
問合せに成功します。 |
親トピック: CDBにおける権限およびロールの付与
権限付与の対象者
権限をユーザーに付与すると、そのユーザーはそれぞれの業務に必要な作業を実行できます。
なお、権限は、必要な作業を実行する上でその権限が必要なユーザーにのみ付与してください。必要でない権限まで付与すると、セキュリティを維持できなくなる可能性があります。たとえば、管理作業を実行しないユーザーには、SYSDBA管理権限またはSYSOPER権限を付与しないでください。
権限は、次の2つの方法でユーザーに付与できます。
-
権限を明示的にユーザーに付与します。たとえば、
employees表にレコードを挿入する権限を、ユーザーpsmithに明示的に付与できます。 -
権限をロール(名前付きの権限グループ)に付与した上で、そのロールを1人以上のユーザーに付与します。たとえば、
employees表からレコードを選択、挿入、更新および削除する権限を、clerkという名前のロールに付与し、このロールをユーザーpsmithやrobertに付与できます。
ロールを使用することで権限の管理が容易になり、改善されるため、通常は権限を個々のユーザーではなくロールに付与してください。
関連項目:
-
権限を付与する際に従うベスト・プラクティスは、ユーザー・アカウントと権限の保護に関するガイドラインを参照してください
-
過度の権限付与が懸念される場合は、『Oracle Database Vault管理者ガイド』を参照してください。
-
システム権限の完全なリストとその詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: 権限とロール認可の構成
Oracleマルチテナント・オプションが権限に影響を与えるしくみ
共通ユーザーを含め、すべてのユーザーは、現在のコンテナ内でのみ権限を行使できます。
ただし、ルートに接続されているユーザーは、他のプラガブル・データベース(PDB)に影響を与える特定の操作を実行できます。これらの操作には、ALTER PLUGGABLE DATABASE、CREATE USER、CREATE ROLEおよびALTER USERが含まれます。共通ユーザーは、これらの操作を可能にする、共通に付与される権限を持つ必要があります。ルートに接続されている共通ユーザーは、ビューにアクセスするために必要な権限を付与されていて、様々なPDBに関するデータを表示できるようにCONTAINER_DATA属性が設定されている場合、ルートのコンテナ・データ・オブジェクト(たとえば、マルチテナント・コンテナ・データベース(CDB)・ビューやV$ビューなど)を介してPDBに関するメタデータを確認できます。共通ユーザーは、PDBの表またはビューに問合せできません。
共通ユーザーは、他のPDBの権限を実行できません。必要なPDBに最初に切り替えて、そこから権限を実行する必要があります。異なるコンテナに切り替えるには、共通ユーザーにSET CONTAINER権限が必要です。SET CONTAINER権限は、共通に付与するか、ユーザーが切替えを試みるコンテナに付与する必要があります。また、共通ユーザーは、そのPDBのCREATE SESSION権限に応じて、現在の初期コンテナがこのユーザーが必要とするコンテナである新しいデータベース・セッションを開始できます。
共通に付与される権限が個々のPDBに構成されたセキュリティを妨げる場合があるので注意してください。たとえば、アプリケーションPDBのデータベース管理者がPDBのいずれのユーザーも特定のアプリケーション共通オブジェクトを変更できないようにするとします。PUBLICまたはオブジェクトの共通ユーザーもしくは共通ロールに共通に付与された権限(UPDATEなど)は、PDBのデータベース管理者の意図に反した動作をします。
親トピック: 権限とロール認可の構成
管理権限の管理
一般的なデータベース操作と特定のデータベース操作の両方に管理権限を使用できます。
- 管理権限について
Oracle Databaseではより適切な作業分担を実現するため、一般的に実施される各管理タスク用の管理権限が用意されています。 - ユーザーへの管理権限の付与
すべての強力な権限と同様に、管理権限は信頼できるユーザーのみに付与してください。 - 標準データベース操作のためのSYSDBAおよびSYSOPER権限
SYSDBAおよびSYSOPER管理権限を使用すると、標準データベース操作を実行できます。 - バックアップおよびリカバリ操作のSYSBACKUP管理権限
Oracle Recovery Manager (RMAN)またはSQL*Plusを使用したバックアップおよびリカバリ操作を実行するには、SYSBACKUP管理権限を使用します。 - Oracle Data Guard操作のSYSDG管理権限
SYSDG管理権限があるSYSDGユーザーとしてログインして、Data Guard操作を実行できます。 - 透過的データ暗号化のSYSKM管理権限
SYSKM管理権限により、SYSKMユーザーは、透過的データ暗号化(TDE)のウォレット操作を管理できます。 - Oracle Real Application ClustersのSYSRAC管理権限
SYSRAC管理権限はOracle Real Application Clusters (Oracle RAC)のClusterwareエージェントによって使用されます。
親トピック: 権限とロール認可の構成
管理権限について
Oracle Databaseではより適切な作業分担を実現するため、一般的に実施される各管理タスク用の管理権限が用意されています。
これらのタスクには、バックアップおよびリカバリ操作、Oracle Data GuardおよびTransparent Data Encryption (TDE)のための暗号化キーの管理などが含まれます。
ユーザーが持つ管理権限は、V$PWFILE_USERS動的ビューを問い合せるとわかります。このビューにはパスワード・ファイル内のユーザーがリストされます。
以前のリリースでは、これらのタスクを実行するSYSDBA管理権限が必要でした。下位互換性をサポートするには、これらのタスクのSYSDBA権限を引き続き使用できますが、この項で説明する管理権限を使用することをお薦めします。
管理権限を付与されたユーザーを、スキーマ限定アカウントに変更できます。
管理権限の使用は強制的に監査されます。
ユーザーへの管理権限の付与
すべての強力な権限と同様に、管理権限は信頼できるユーザーのみに付与してください。
ただし、名前に非ASCII文字(HÜBERという名前に含まれるウムラウトなど)を使用しているユーザーには制限があります。こうしたユーザーに管理権限を付与することは可能ですが、Oracle Databaseインスタンスが停止した場合、名前に非ASCII文字を使用しているユーザーには、付与されている権限を使用した認証がサポートされません。データベース・インスタンスが稼働中であれば、この認証はサポートされます。
親トピック: 管理権限の管理
標準データベース操作のためのSYSDBAおよびSYSOPER権限
SYSDBAおよびSYSOPER管理権限を使用すると、標準データベース操作を実行できます。
これらのデータベース操作には、データベースの起動および停止、サーバー・パラメータ・ファイル(SPFILE)の作成またはデータベース・アーカイブ・ログの変更などのタスクがあります。SYSDBAおよびSYSOPER管理権限をアプリケーション共通ユーザーに付与できます(CDB共通ユーザーには付与できません)。
ローカル(PDB)レベル、CDBルート、またはアプリケーション・ルートの管理権限がユーザーに付与されているかどうかを確認するには、V$PWFILE_USERS動的ビューのSCOPE列を問い合せます。
認証なしで作成されたユーザーにSYSDBAおよびSYSOPER管理権限を付与できます。
親トピック: 管理権限の管理
バックアップおよびリカバリ操作のSYSBACKUP管理権限
Oracle Recovery Manager (RMAN)またはSQL*Plusを使用したバックアップおよびリカバリ操作を実行するには、SYSBACKUP管理権限を使用します。
パスワードを使用してSYSBACKUPとしてデータベースに接続するには、そのパスワード・ファイルを作成する必要があります。パスワード・ファイルの作成の詳細は、『Oracle Database管理者ガイド』を参照してください。
認証なしで作成されたユーザーにSYSBACKUP管理権限を付与できません。
この権限では、次の操作を実行できます。
-
STARTUP -
SHUTDOWN -
ALTER DATABASE -
ALTER SYSTEM -
ALTER SESSION -
ALTER TABLESPACE -
CREATE CONTROLFILE -
CREATE ANY DIRECTORY -
CREATE ANY TABLE -
CREATE ANY CLUSTER -
CREATE PFILE -
CREATE RESTORE POINT(GUARANTEEDリストア・ポイントを含む) -
CREATE SESSION -
CREATE SPFILE -
DROP DATABASE -
DROP TABLESPACE -
DROP RESTORE POINT(GUARANTEEDリストア・ポイントを含む) -
FLASHBACK DATABASE -
RESUMABLE -
UNLIMITED TABLESPACE -
SELECT ANY DICTIONARY -
SELECT ANY TRANSACTION -
SELECT-
X$表(つまり、固定表) -
V$およびGV$ビュー(つまり、動的パフォーマンス・ビュー) -
APPQOSSYS.WLM_CLASSIFIER_PLAN -
SYSTEM.LOGSTDBY$PARAMETERS
-
-
DELETE/INSERT-
SYS.APPLY$_SOURCE_SCHEMA -
SYSTEM.LOGSTDBY$PARAMETERS
-
-
EXECUTE-
SYS.DBMS_BACKUP_RESTORE -
SYS.DBMS_RCVMAN -
SYS.DBMS_DATAPUMP -
SYS.DBMS_IR -
SYS.DBMS_PIPE -
SYS.SYS_ERROR -
SYS.DBMS_TTS -
SYS.DBMS_TDB -
SYS.DBMS_PLUGTS -
SYS.DBMS_PLUGTSP
-
-
SELECT_CATALOG_ROLE
また、SYSBACKUP権限では、データベースをオープンしていない場合でもデータベースに接続できます。
関連項目:
バックアップおよびリカバリ操作の詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。
親トピック: 管理権限の管理
Oracle Data Guard操作のSYSDG管理権限
SYSDG管理権限があるSYSDGユーザーとしてログインして、Data Guard操作を実行できます。
Data Guard BrokerまたはDGMGRLコマンドライン・インタフェースでこの権限を使用できます。パスワードを使用してSYSDGとしてデータベースに接続するには、そのパスワード・ファイルを作成する必要があります。
認証なしで作成されたユーザーにSYSYSDG管理権限を付与できません。
SYSDG権限では、次の操作を実行できます。
-
STARTUP -
SHUTDOWN -
ALTER DATABASE -
ALTER SESSION -
ALTER SYSTEM -
CREATE RESTORE POINT(GUARANTEEDリストア・ポイントを含む) -
CREATE SESSION -
DROP RESTORE POINT(GUARANTEEDリストア・ポイントを含む) -
FLASHBACK DATABASE -
SELECT ANY DICTIONARY -
SELECT-
X$表(つまり、固定表) -
V$およびGV$ビュー(つまり、動的パフォーマンス・ビュー) -
APPQOSSYS.WLM_CLASSIFIER_PLAN
-
-
DELETE-
APPQOSSYS.WLM_CLASSIFIER_PLAN
-
-
EXECUTE-
SYS.DBMS_DRS
-
また、SYSDG権限では、データベースをオープンしていない場合でもデータベースに接続できます。
関連項目:
-
パスワード・ファイルの作成の詳細は、『Oracle Database管理者ガイド』を参照してください。
-
Oracle Data Guardの詳細は、Oracle Data Guard概要および管理を参照
親トピック: 管理権限の管理
透過的データ暗号化のSYSKM管理権限
SYSKM管理権限により、SYSKMユーザーは、透過的データ暗号化(TDE)のウォレット操作を管理できます。
パスワードを使用してSYSKMとしてデータベースに接続するには、そのパスワード・ファイルを作成する必要があります。
認証なしで作成されたユーザーにSYSKM管理権限を付与できません。
SYSKM管理権限では、次の操作を実行できます。
-
ADMINISTER KEY MANAGEMENT -
CREATE SESSION -
SELECT(データベースをオープンしている場合のみ)-
SYS.V$ENCRYPTED_TABLESPACES -
SYS.V$ENCRYPTION_WALLET -
SYS.V$WALLET -
SYS.V$ENCRYPTION_KEYS -
SYS.V$CLIENT_SECRETS -
SYS.DBA_ENCRYPTION_KEY_USAGE
-
また、SYSKM権限では、データベースをオープンしていない場合でもデータベースに接続できます。
関連項目:
-
パスワード・ファイルの作成の詳細は、『Oracle Database管理者ガイド』を参照してください。
-
透過的データ暗号化の詳細は、『Oracle Database Advanced Securityガイド』を参照してください。
親トピック: 管理権限の管理
Oracle Real Application ClustersのSYSRAC管理権限
SYSRAC管理権限はOracle Real Application Clusters (Oracle RAC)のClusterwareエージェントによって使用されます。
SYSRAC管理権限は、日常的なOracle RAC操作の実行に必要な最小限の権限のみを提供します。たとえば、この権限はSRVCTLなどのOracle RACユーティリティに使用します。
認証なしで作成されたユーザーにSYSRAC管理権限を付与できません。
SYSRAC管理権限では、次の操作を実行できます。
-
STARTUP -
SHUTDOWN -
ALTER DATABASE MOUNT -
ALTER DATABASE OPEN -
ALTER DATABASE OPEN READ ONLY -
ALTER DATABASE CLOSE NORMAL -
ALTER DATABASE DISMOUNT -
ALTER SESSION SET EVENTS -
ALTER SESSION SET _NOTIFY_CRS -
ALTER SESSION SET CONTAINER -
ALTER SYSTEM REGISTER -
ALTER SYSTEM SET local_listener|remote_listener|listener_networks
これらの権限に加えて、SYSRACユーザーは次のビューにアクセスできます。
-
V$PARAMETER -
V$DATABASE -
V$PDBS -
CDB_SERVICE$ -
DBA_SERVICES -
V$ACTIVE_SERVICES -
V$SERVICES
SYSRACユーザーには、次のPL/SQLパッケージのEXECUTE権限が付与されます。
-
DBMS_DRS -
DBMS_SERVICE -
DBMS_SERVICE_PRVT -
DBMS_SESSION -
DBMS_HA_ALERTS_PRVT -
メッセージのデキュー
SYS.SYS$SERVICE_METRICS
親トピック: 管理権限の管理
システム権限の管理
スキーマ・オブジェクトに対するアクションを実行するには、適切なシステム権限が付与されている必要があります。
- システム権限について
システム権限とは、スキーマ・オブジェクトに対して1つまたは複数の操作を実行する権限です。 - システム権限を制限することが重要な理由
システム権限はかなり強力であるため、信頼できるユーザーのみに権限を付与してください。さらに、データ・ディクショナリおよびSYSスキーマ・オブジェクトを保護する必要があります。 - システム権限の付与と取消し
システム権限は、ユーザーとロールに対して付与したり、取り消すことができます。 - システム権限を付与したり、取り消すことができるユーザー
他のユーザーにシステム権限を付与したり、他のユーザーのシステム権限を取り消すことができるのは、次の2つのタイプのユーザーのみです。 - ANY権限とPUBLICロールについて
ANYキーワードを使用するシステム権限を使用すると、データベース内のオブジェクトのカテゴリ全体に対して権限を設定できます。
親トピック: 権限とロール認可の構成
システム権限について
システム権限とは、スキーマ・オブジェクトに対して1つまたは複数の操作を実行する権限です。
たとえば、表領域を作成する権限や、データベース内の任意の表から行を削除する権限などがシステム権限です。
システム権限には100以上の種類があります。各システム権限によって、ユーザーは特定のデータベース操作、またはあるクラスのデータベース操作を実行できます。システム権限は非常に強力な権限であることに注意してください。システム権限は、必要な場合のみ、データベースのロールと信頼できるユーザーに付与してください。ユーザーに付与されたシステム権限を検索するには、DBA_SYS_PRIVSデータ・ディクショナリ・ビューを問い合せます。
関連項目:
-
システム権限の完全なリストとその詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: システム権限の管理
システム権限を制限することが重要な理由
システム権限はかなり強力であるため、信頼できるユーザーのみに権限を付与してください。さらに、データ・ディクショナリおよびSYSスキーマ・オブジェクトを保護する必要があります。
- システム権限の制限の重要性について
システム権限は非常に強力であるため、データベースは、通常のユーザー(管理者以外)がANYシステム権限を行使できないようにデフォルトで構成されています。 - SYSスキーマのオブジェクトへのユーザー・アクセス
明示的なオブジェクト権限のあるユーザーまたは管理権限で接続しているユーザー(SYSDBA)は、SYSスキーマ内のオブジェクトにアクセスできます。
親トピック: システム権限の管理
システム権限の制限の重要性について
システム権限は非常に強力であるため、データベースは、通常のユーザー(管理者以外)がANYシステム権限を行使できないようにデフォルトで構成されています。
たとえば、ユーザーは、データ・ディクショナリに対してUPDATE ANY TABLEなどのANYシステム権限を行使できなくなっています。
関連トピック
親トピック: システム権限を制限することが重要な理由
SYSスキーマのオブジェクトへのユーザー・アクセス
明示的なオブジェクト権限のあるユーザーまたは管理権限で接続しているユーザー(SYSDBA)は、SYSスキーマ内のオブジェクトにアクセスできます。
表4-4に、SYSスキーマ内のオブジェクトへのアクセスが必要なユーザーに対して付与できるロールをリストします。
表4-4 SYSスキーマ・オブジェクトにアクセスできるロール
| ロール | 説明 |
|---|---|
|
|
このロールを付与されたユーザーには、データ・ディクショナリ・ビューに対する |
|
|
このロールを付与されたユーザーには、データ・ディクショナリ内にあるパッケージとプロシージャに対する |
さらにSELECT ANY DICTIONARYシステム権限を、SYSスキーマで作成された表にアクセスが必要なユーザーに付与できます。このシステム権限により、SYSスキーマのあらゆるオブジェクト(そのスキーマに作成された表を含む)への問合せアクセスが可能になります。このシステム権限は、これを必要とする各ユーザーへ個別に付与する必要があります。これはGRANT ALL PRIVILEGESには含まれていませんが、ロールを通じて付与できます。
ノート:
これらのロールおよびSELECT ANY DICTIONARYシステム権限は、悪用されるとシステムの整合性が損われる危険があるため、付与する際には十分な注意が必要です。
親トピック: システム権限を制限することが重要な理由
システム権限の付与と取消し
システム権限は、ユーザーとロールに対して付与したり、取り消すことができます。
システム権限をロールに付与すると、そのロールを使用してシステム権限を行使できます。たとえば、ロールを使用すると権限を選択的に使用できるようになります。ロールの保護に関するガイドラインで説明する業務分離のガイドラインに従っていることを確認してください。
ユーザーやロールに対するシステム権限の付与と取消しには、次のいずれかの方法を使用します。
-
SQL文の
GRANTおよびREVOKE -
Oracle Enterprise Manager Cloud Control。
関連トピック
親トピック: システム権限の管理
システム権限を付与したり、取り消すことができるユーザー
他のユーザーにシステム権限を付与したり、他のユーザーのシステム権限を取り消すことができるのは、次の2つのタイプのユーザーのみです。
これらのユーザーは次のとおりです。
-
ADMINOPTIONによって特定のシステム権限を付与されているユーザー -
GRANTANYPRIVILEGEシステム権限を付与されているユーザー
そのため、これらの権限は信頼できるユーザーにのみ付与してください。
親トピック: システム権限の管理
ANY権限とPUBLICロールについて
ANYキーワードを使用するシステム権限を使用すると、データベース内のオブジェクトのカテゴリ全体に対して権限を設定できます。
たとえば、CREATE ANY PROCEDUREシステム権限により、ユーザーはデータベース内のどこにでもプロシージャを作成可能になります。ANY権限を持つユーザーが作成したオブジェクトの動作は、そのオブジェクトが作成されたスキーマに限定されません。たとえば、ユーザーJSMITHにはCREATE ANY PROCEDURE権限があり、プロシージャをスキーマJONESに作成すると、そのプロシージャはJONESとして実行されることになります。ただし、JONESはJSMITHによって作成されたプロシージャがJONESとして機能していることに気付かない可能性があります。JONESにDBA権限が付与されている場合は、JSMITHがJONESとしてプロシージャを実行することで、セキュリティ違反が発生する可能性があります。
PUBLICロールは、データベース・ユーザー・アカウントが作成されるときすべてのアカウントに自動的に与えられる特別なロールです。デフォルトでは付与されている権限がありませんが、多数の付与があり、ほとんどがJavaオブジェクトに対する付与です。PUBLICロールは削除できません。また、ユーザー・アカウントは常にこのロールを前提とするため、このロールの手動の付与や取消しは意味がありません。PUBLICロールはすべてのデータベース・ユーザー・アカウントが前提とするため、DBA_ROLESおよびSESSION_ROLESデータ・ディクショナリ・ビューには表示されません。
PUBLICロールに権限を付与できますが、付与した権限はOracleデータベースのすべてのユーザーが利用できるようになることに注意してください。このため、PUBLICロールに権限を付与するとき、特にANY権限やシステム権限のように強力な権限の場合は注意してください。たとえば、JSMITHがCREATE PUBLIC SYNONYMシステム権限を持っている場合、他の誰もが使用するとわかっているインタフェースを再定義し、それから自分で作成したPUBLIC SYNONYMでこのインタフェースを指し示すことができます。ユーザーは正しいインタフェースではなくJSMITHのインタフェースにアクセスし、ユーザーのログイン資格証明が盗まれるなど、不正な行為が実行される可能性があります。
この種の権限は非常に強力であるため、不適切な個人に付与するとセキュリティ上のリスクが発生する可能性があります。ANYまたはPUBLICを使用した権限の付与には注意が必要です。他のすべての権限と同様に、これらの権限をユーザーに付与する場合は、「最低限の権限」を付与する原則に従ってください。
親トピック: システム権限の管理
診断を有効にする権限の管理
SYSDBA管理権限またはENABLE_DIAGNOSTICSシステム権限を持つユーザーのみが診断を有効にできるようにすることができます。
ALTER SESSIONおよびALTER SYSTEM操作を介したデバッグ・イベント(イベント++、エラー番号)とデバッグ・アクション。
親トピック: 権限とロール認可の構成
共通およびローカルに付与される権限の管理
権限は、CDBまたはアプリケーション・コンテナの全体に共通に付与するか、特定のPDBに対してローカルに付与することができます。
- 共通およびローカルに付与される権限について
共通ユーザーとローカル・ユーザーは両方とも、相互に権限を付与できます。 - 共通に付与されるシステム権限の使用方法
ユーザーは、システム権限が付与されているPDB内でのみシステム権限を実行できます。 - 共通に付与されるオブジェクト権限の使用方法
共通オブジェクトのオブジェクト権限は、オブジェクト自体とそのオブジェクト上の関連するすべてのリンクに適用されます。 - PDBへのアクセス権限の付与または取消し
PDBアクセスの権限を付与することや取り消すことができます。 - 例: 共通ユーザーへの権限の付与
共通ユーザーに権限を付与するには、ルートでGRANT文を使用する必要があります。 - 共通ユーザーによるCONTAINER_DATAオブジェクトの情報の表示
共通ユーザーは、ルート内のCONTAINER_DATAオブジェクトや特定のPDB内のデータに関する情報を表示できます。
親トピック: 権限とロール認可の構成
共通およびローカルに付与される権限について
共通ユーザーとローカル・ユーザーは両方とも、相互に権限を付与できます。
権限自体は、共通でもローカルでもありません。権限がどのように適用されるかは、権限が共通に付与されるか、ローカルに付与されるかによって異なります。
共通に付与される権限の場合:
-
共通に付与される権限は、既存および将来のすべてのコンテナで使用できます。
-
権限を共通に付与できるのは共通ユーザーのみで、権限受領者が共通の場合のみです。
-
共通ユーザーは、他の共通ユーザーまたは共通ロールに権限を付与できます。
-
権限付与者は、ルートに接続して、
GRANT文のCONTAINER=ALLを指定する必要があります。 -
システム権限とオブジェクト権限は、どちらも共通に付与できます。(オブジェクト権限は、指定したオブジェクトに関してのみ実現化します。)
-
共通ユーザーを指定されたコンテナに接続または切り替える場合、様々なアクティビティ(表の作成など)を実行するユーザーの機能は、共通に付与された権限および特定のコンテナでローカルに付与された権限によって制御されます。
-
PUBLICには権限を共通に付与しないでください。
ローカルに付与される権限
-
ローカルに付与された権限は、それが付与されたコンテナでのみ使用できます。権限がルートで付与されている場合は、ルートにのみ適用されます。
-
共通ユーザーおよびローカル・ユーザーは、どちらも権限をローカルに付与できます。
-
共通ユーザーおよびローカル・ユーザーは、他の共通ロールまたはローカル・ロールに権限を付与できます。
-
権限付与者は、コンテナに接続して、
GRANT文のCONTAINER=CURRENTを指定する必要があります。 -
ユーザーは、他のユーザーまたはロール(共通およびローカルの両方)あるいは
PUBLICロールにローカルに権限を付与できます。
共通に付与されるシステム権限の使用方法
ユーザーは、システム権限が付与されているPDB内でのみシステム権限を実行できます。
たとえば、PDB B内の共通ユーザーAにシステム権限がローカルに付与されている場合、ユーザーAは、PDB Bに接続されている間のみ、その権限を実行できます。
システム権限は、ルートでのみ適用可能で、次の要件を満たしている場合は、既存および将来のすべてのPDBで適用できます。
-
システム権限付与者が共通ユーザーで、権限受領者が共通ユーザー、共通ロールまたは
PUBLICロールです。事実上すべてのユーザーがシステム権限を使用できるようになるため、システム権限をPUBLICロールに共通に付与しないでください。 -
システム権限付与者は、共通に付与される権限に対して
ADMIN OPTIONを所有しています。 -
GRANT文には、CONTAINER=ALL句を含める必要があります。
次の例は、共通ユーザーc##hr_adminに権限を共通に付与する方法を示しています。
CONNECT SYSTEM
Enter password: password
Connected.
GRANT CREATE ANY TABLE TO c##hr_admin CONTAINER=ALL;親トピック: 共通およびローカルに付与される権限の管理
共通に付与されるオブジェクト権限の使用方法
共通オブジェクトのオブジェクト権限は、オブジェクト自体とそのオブジェクト上の関連するすべてのリンクに適用されます。
このリンクには、すべてのメタデータ・リンクおよびデータ・リンク(旧称オブジェクト・リンク)のほか、ルートやコンテナに属するすべてのPDB(将来のPDBを含む)内で特定の要件を満たしたときに関連付けが行われる拡張データ・リンクが含まれます。
この要件を次に示します。
-
オブジェクト権限付与者が共通ユーザーで、権限受領者が共通ユーザー、共通ロールまたは
PUBLICロールです。 -
オブジェクト権限付与者は、権限に対して共通に付与される
GRANT OPTIONを所有しています -
GRANT文には、CONTAINER=ALL句が含まれています。
次の例は、共通ユーザーc##hr_adminにオブジェクト権限を付与して、CDBルートまたは関連付けらているアクセス可能なPDBのいずれかでDBA_PDBSビューから選択できるようにする方法を示しています。
CONNECT SYSTEM
Enter password: password
Connected.
GRANT SELECT ON DBA_OBJECTS TO c##hr_admin
CONTAINER=ALL;PDBへのアクセス権限の付与または取消し
PDBアクセスの権限を付与することや取り消すことができます。
GRANT文またはREVOKE文にCONTAINER句を含めます。
CONTAINERをALLに設定すると、既存および将来のすべてのコンテナに権限が適用され、CURRENTに設定すると、ローカル・コンテナのみに権限が適用されます。CONTAINER句を省略すると、ローカル・コンテナに権限が適用されます。ルートからGRANT文を発行してCONTAINER句を省略すると、権限がローカルに適用されます。
関連トピック
親トピック: 共通およびローカルに付与される権限の管理
例: 共通ユーザーへの権限の付与
共通ユーザーに権限を付与するには、ルートでGRANT文を使用する必要があります。
例4-3は、既存および将来のすべてのコンテナでこの権限を使用できるように、共通ユーザーc##hr_adminにCREATE TABLE権限を共通に付与する方法を示しています。
例4-3 マルチテナント環境での権限の付与
CONNECT SYSTEM
Enter password: password
Connected.
GRANT CREATE TABLE TO c##hr_admin CONTAINER=ALL;親トピック: 共通およびローカルに付与される権限の管理
共通ユーザーによるCONTAINER_DATAオブジェクトの情報の表示
共通ユーザーは、ルート内のCONTAINER_DATAオブジェクトや特定のPDB内のデータに関する情報を表示できます。
- ルートに接続中のルート、CDBおよびPDBに関するデータの表示
共通ユーザーが問合せを実行した場合に、X$表ならびにV$、GV$およびCDB_*ビューの表示情報を制限できます。 - 特定のPDBのデータを問い合せる共通ユーザーの有効化
特定のPDBに関するデータへのアクセスを共通ユーザーに許可するには、ユーザーのCONTAINER_DATA属性を調整します。
親トピック: 共通およびローカルに付与される権限の管理
ルートに接続中のルート、CDBおよびPDBに関するデータの表示
共通ユーザーが問合せを実行した場合に、X$表ならびにV$、GV$およびCDB_*ビューの表示情報を制限できます。
X$表およびこれらのビューには、アプリケーション・ルートおよび関連付けられたアプリケーションPDBに関する情報(CDBルートに接続している場合は、CDB全体に関する情報)が含まれます。
この情報の制限は、他のPDBに関する機密情報を公開しない場合に役立ちます。この機能を有効にするために、Oracle Databaseでは、これらの表およびビューをコンテナ・データ・オブジェクトとして提供します。特定の表またはビューがコンテナ・データ・オブジェクトかどうかを確認するには、USER_|DBA_|ALL_VIEWS|TABLESディクショナリ・ビューのTABLE_NAME、VIEW_NAMEおよびCONTAINER_DATA 列を問い合せます。
デフォルト(ユーザー・レベル)およびオブジェクト固有のCONTAINER_DATA属性に関する情報を検索するには、次のようにします。
-
SQL*PlusまたはSQL Developerで、rootとしてログインします。
-
CDB_CONTAINER_DATAデータ・ディクショナリ・ビューを問い合せます。例:
COLUMN USERNAME FORMAT A13 COLUMN DEFAULT_ATTR FORMAT A7 COLUMN OWNER FORMAT A11 COLUMN OBJECT_NAME FORMAT A11 COLUMN ALL_CONTAINERS FORMAT A3 COLUMN CONTAINER_NAME FORMAT A10 COLUMN CON_ID FORMAT A6 SELECT USERNAME, DEFAULT_ATTR, OWNER, OBJECT_NAME, ALL_CONTAINERS, CONTAINER_NAME, CON_ID FROM CDB_CONTAINER_DATA ORDER BY OBJECT_NAME; USERNAME DEFAULT OWNER OBJECT_NAME ALL CONTAINERS CON_ID ----------- ------- ----- ----------- --- ---------- ------ C##HR_ADMIN N SYS V$SESSION N CDB$ROOT 1 C##HR_ADMIN N SYS V$SESSION N SALESPDB 1 C##HR_ADMIN Y N HRPDB 1 C##HR_ADMIN Y N CDB$ROOT 1 DBSNMP Y Y 1 SYSTEM Y Y 1
関連トピック
特定のPDBのデータを問い合せる共通ユーザーの有効化
特定のPDBに関するデータへのアクセスを共通ユーザーに許可するには、ユーザーのCONTAINER_DATA属性を調整します。
共通ユーザーが特定のPDBについてのデータにアクセスできるようにするには、次のようにします。
-
ルートで
ALTER USER文を発行します。
例4-4 CONTAINER_DATA属性の設定
この例は、ALTER USER文を発行して、共通ユーザーc##hr_adminがV$SESSIONビュー(このユーザーがこのビューを問い合せることができるものと仮定します)のCDB$ROOT、SALES_PDBおよびHRPDBコンテナに関する情報を表示できるようにする方法を示しています。
CONNECT SYSTEM
Enter password: password
Connected.
ALTER USER c##hr_admin
SET CONTAINER_DATA = (CDB$ROOT, SALESPDB, HRPDB)
FOR V$SESSION CONTAINER=CURRENT;
詳細は、次のとおりです。
-
SET CONTAINER_DATAは、コンテナのほか、ユーザーがアクセスできる対象に関するデータをリストします。 -
FOR V$SESSIONは、共通ユーザーc##hr_adminが問い合せるCONTAINER_DATA動的ビューを指定します。 -
ルートに接続する場合に
CONTAINER=ALLがALTER USER文のデフォルトのため、CONTAINER = CURRENTを指定する必要がありますが、CONTAINER_DATA属性の変更はルートに制限する必要があります。
ユーザーc##hr_adminが自身がアクセス可能なすべてのCONTAINER_DATAオブジェクト内のCDB$ROOT、SALES_PDB、HRPDBコンテナに関連する情報を表示できるようにするには、FOR V$SESSIONを省略します。例:
ALTER USER c##hr_admin
SET CONTAINER_DATA = (CDB$ROOT, SALESPDB, HRPDB)
CONTAINER=CURRENT;
共通ロールおよびローカル・ロールの管理
共通ロールはルートで作成されるロールであり、ローカル・ロールはPDBで作成されます。
- 共通ロールおよびローカル・ロールの管理について
データベース・ロールは、1つのPDBに固有のものにすることも、システム・コンテナまたはアプリケーション・コンテナ全体で使用することもできます。 - CDBの共通ロール
共通ロールは、CDBルートまたはアプリケーション・ルートのいずれかに存在し、ルート・コンテナ(CDBまたはアプリケーション・コンテナのいずれか)内のあらゆるPDBに適用されます。 - 共通ロールの使用方法
共通ロールは、ルートにおいて、およびそれらのロールが定義されているコンテナの各PDBにおいて表示できます。 - マルチテナント環境でPUBLICロールが機能するしくみ
OracleによってPUBLICロールに付与されるすべての権限はローカルに付与されます。 - 共通ロールの作成、変更または削除に必要な権限
共通に付与されるCREATE ROLE、ALTER ROLEおよびDROP ROLE権限を持つ共通ユーザーのみが、共通ロールの作成、変更または削除ができます。 - 共通ロールの作成の規則
共通ロールを作成する場合は、特別な規則に従う必要があります。 - 共通ロールの作成
CREATE ROLE文を使用して、共通ロールを作成できます。 - ローカル・ロールの作成の規則
ローカル・ロールを作成するには、特別な規則に従う必要があります。 - CDBにおけるローカル・ルール
ローカル・ロールは、単一のPDBにのみ存在するため、他のPDBのローカル・ロールとは完全に独立しています。 - ローカル・ロールの作成
CREATE ROLE文を使用して、ロールを作成できます。 - 共通ユーザーとローカル・ユーザーに対するロールの付与と取消し
ロールの付与と取消しは、共通ユーザーまたはローカル・ユーザーのアクセス範囲にのみ適用されます。
親トピック: 権限とロール認可の構成
共通ロールおよびローカル・ロールの管理について
データベース・ロールは、1つのPDBに固有のものにすることも、システム・コンテナまたはアプリケーション・コンテナ全体で使用することもできます。
共通ロールとは、IDと(オプションの)パスワードがコンテナのルートで作成され、ルートのほか、そのコンテナに属する既存および将来のすべてのPDBで認識されるロールです。
ローカル・ロールは、1つのPDBにのみ存在し、このPDB内でのみ使用できます。共通に付与される権限は持ちません。
次のことに注意してください。
-
共通ユーザーは、共通ロールを作成して、他の共通ユーザーおよびローカル・ユーザーに付与できます。
-
ロール(ローカルまたは共通)は、ローカル・ユーザーまたはロールに対してローカルに付与できます。
-
共通ロールをローカルに付与する場合、その共通ロールの権限は、ロールが付与されるコンテナ内にのみ適用されます。
-
ローカル・ユーザーは共通ロールを作成できませんが、共通ユーザーおよび他のローカル・ユーザーに共通ロールを付与できます。
-
共通ロールをCDBルートまたはアプリケーション・ルートで作成する場合、
CONTAINER = ALL句がデフォルトです。 - Oracle提供ロールは、例として事前定義
DBAロールのように、すべて共通です。Oracle提供のスクリプトでは、Oracle提供のユーザーおよびロールに付与されるすべての権限またはロールは共通に付与されますが、例外は、システム権限が共通ロールPUBLICに対してローカルに付与される場合です。
親トピック: 共通ロールおよびローカル・ロールの管理
CDBの共通ロール
共通ロールは、CDBルートまたはアプリケーション・ルートのいずれかに存在し、ルート・コンテナ(CDBまたはアプリケーション・コンテナのいずれか)内のあらゆるPDBに適用されます。
共通ロールは、コンテナ間の操作に便利で、共通ユーザーがすべてのPDBでロールを持つことを保証します。すべての共通ユーザーは、次のいずれかのタイプになります。
-
Oracle提供
DBAやPUBLICなどのOracle提供ロールはすべて、CDBに共通です。 -
ユーザー作成
共通ロールを作成するには、CDBルートまたはアプリケーション・ルートのいずれか(これによって、ロールが共通となるコンテナが決まります)で
CREATE ROLE ... CONTAINER=ALLを実行します。標準の命名規則が適用されます。また、CDB共通ロールには、COMMON_USER_PREFIX初期化パラメータによって指定された文字(デフォルトではc##またはC##)で始まる名前を付ける必要があります。
ロールのスコープは、そのロールが定義されているルートのスコープです。CDB$ROOTでロールを定義すると、そのスコープはCDB全体になります。アプリケーション・ルート内でロールを定義すると、そのスコープはアプリケーション・コンテナになります。
親トピック: 共通ロールおよびローカル・ロールの管理
共通ロールの使用方法
共通ロールは、ルートにおいて、およびそれらのロールが定義されているコンテナの各PDBにおいて表示できます。
次の場合、権限は共通ロールに対して共通に付与されます。
-
付与者は、共通ユーザーである。
-
付与者は、付与される権限に対して、共通に付与される
ADMIN OPTIONを所有している。 -
GRANT文には、CONTAINER=ALL句が含まれています。
共通ロールがローカルに付与された権限を含む場合、これらの権限は、共通ロールに付与されたPDB内にのみ適用されます。ローカル・ロールは共通に付与できません。
たとえば、CDB共通ユーザーc##hr_mgrに、DBAロールが共通付与されているとします。これは、ユーザーc##hr_mgrがコンテナのルートおよび各PDBでDBAロールに関連付けられている権限を使用できるということです。一方、CDB共通ユーザーc##hr_mgrに、hr_pdb PDBに対するDBAロールがローカルで付与されているのみであれば、このユーザーは、hr_pdb PDBでのみDBAロールの権限を使用できます。
親トピック: 共通ロールおよびローカル・ロールの管理
マルチテナント環境でPUBLICロールが機能するしくみ
OracleによってPUBLICロールに付与されるすべての権限はローカルに付与されます。
この機能により、各PDBで個別にPUBLICロールに付与された権限およびロールを必要に応じて取り消すことができます。権限をPUBLICロールに付与する必要がある場合は、ローカルに付与します。PUBLICには権限を共通に付与しないでください。
関連トピック
親トピック: 共通ロールおよびローカル・ロールの管理
共通ロールの作成、変更または削除に必要な権限
共通に付与されるCREATE ROLE、ALTER ROLEおよびDROP ROLE権限を持つ共通ユーザーのみが、共通ロールの作成、変更または削除ができます。
共通ユーザーはローカル・ロールも作成できますが、作成されたPDBでのみそれらのロールを使用できます。
親トピック: 共通ロールおよびローカル・ロールの管理
共通ロールの作成の規則
共通ロールを作成する場合は、特別な規則に従う必要があります。
この規則は次のとおりです。
-
正しいルートにいることを確認します。共通ロールを作成するには、正しいルート(CDBルートまたはアプリケーション・ルート)にいる必要があります。PDBから共通ロールを作成することはできません。正しいルートにいることを確認するには、次のいずれかを実行します。
-
CDBルートにいることを確認するには、
show_con_nameコマンドを発行します。CDB$ROOTと表示される必要があります。 -
アプリケーション・ルートにいることを確認するには、次の問合せに
YESが戻されることを確認します。SELECT APPLICATION_ROOT FROM V$PDBS WHERE CON_ID=SYS_CONTEXT('USERENV', 'CON_ID'); -
共通ロールに付ける名前がCOMMON_USER_PREFIXパラメータの値(デフォルトではC##)で始まるようにします。この要件は
DBAやRESOURCEなど、Oracle Databaseによって提供される既存のロールの名前に適用されないことに注意してください。
-
-
オプションで、CONTAINER句をALLに設定します。ルートにいるかぎりは、
CONTAINER = ALL句を省略しても、ロールは、デフォルトでCDBルートまたはアプリケーション・ルートの共通ロールとして作成されます。
親トピック: 共通ロールおよびローカル・ロールの管理
ローカル・ロールの作成の規則
ローカル・ロールを作成するには、次の特別な規則に従う必要があります。
これらの規則は次のとおりです。
-
ロールを作成するPDBに接続する必要があり、
CREATE ROLE権限がある必要があります。 -
ローカル・ロールに付ける名前を
COMMON_USER_PREFIXパラメータの値(デフォルトではC##)で始めることはできません。 -
CREATE ROLE文にCONTAINER=CURRENTを含め、ローカル・ロールとしてロールを指定できます。PDBに接続しており、この句を省略すると、CONTAINER=CURRENT句が含まれます。 -
共通ロールとローカル・ロールの名前を同じにすることはできません。ただし、異なるPDBのローカル・ロールに同じ名前を使用できます。既存のロールの名前を検索するには、
CDB_ROLESおよびDBA_ROLESデータ・ディクショナリ・ビューを問い合せます。
親トピック: 共通ロールおよびローカル・ロールの管理
CDBのローカル・ロール
ローカル・ロールは、単一のPDBにのみ存在するため、他のPDBのローカル・ロールとは完全に独立しています。
ローカル・ロールには、そのロールが存在するコンテナで適用されるロールおよび権限のみを含めることができます。たとえば、hrpdbでローカル・ロールpdbadminを作成した場合、このロールのスコープはこのPDBに制限されます。
同じCDB、または同じアプリケーション・コンテナのPDBには、同じ名前のローカル・ロールが含まれる場合があります。たとえば、ユーザー作成のロールpdbadminは、hrpdbとsalespdbのどちらにも存在する可能性があります。ただし、これらのロールは相互に完全に独立しています。
親トピック: 共通ロールおよびローカル・ロールの管理
共通ユーザーとローカル・ユーザーに対するロールの付与と取消し
ロールの付与と取消は、共通ユーザーまたはローカル・ユーザーのアクセス範囲にのみ適用されます。
共通ユーザーは、他の共通ユーザーへの共通ロールの付与および取消しを行うことができます。ローカル・ユーザーは、共通ロールを共通ユーザーを含むPDBのユーザーに付与できますが、これは、PDB内のみで適用されます。
次の例は、共通ユーザーc##sec_adminへのすべてのコンテナで使用するAUDIT_ADMIN共通ロールの付与方法を示しています。
CONNECT SYSTEM
Enter password: password
Connected.
GRANT AUDIT_ADMIN TO c##sec_admin CONTAINER=ALL;
同様に、次の例は、ローカル・ユーザーaud_adminによる共通ユーザーc##sec_adminへのhrpdb PDB内で使用するAUDIT_ADMIN共通ロールの付与方法を示しています。
CONNECT aud_admin@hrpdb
Enter password: password
Connected.
GRANT AUDIT_ADMIN TO c##sec_admin CONTAINER=CURRENT;
この例は、ローカル・ユーザーaud_adminがPDBの別のユーザーからロールを取り消す方法を示しています。CONTAINER句を省略すると、CURRENTが暗黙のうちに入れられます。
CONNECT aud_admin@hrpdb
Enter password: password
Connected.
REVOKE sec_admin FROM psmith CONTAINER=CURRENT;親トピック: 共通ロールおよびローカル・ロールの管理
ユーザー・ロールの管理
ユーザー・ロールは、作成したり他のユーザーに割り当てることができる権限の名前付きコレクションです。
- ユーザー・ロールについて
DDLの使用を制限するなど、ユーザー・ロールは様々な目的で利用できます。 - Oracle Databaseのインストールで事前に定義されているロール
Oracle Databaseには、データベース管理を容易にする一連の事前定義ロールが用意されています。 - ロールの作成
パスワードの有無に関係なく、認証されるロールを作成できます。外部ロールまたはグローバル・ロールも作成できます。 - ロール認可のタイプの指定
データベースや外部ソースなどの様々なソースを通じて認可されるように、ロールを構成できます。 - ロールの付与と取消し
ロールに権限を付与またはロールから権限を取り消して、そのロールをユーザーまたは別のロールに付与できます。 - ロールの削除
ロールの削除は、そのロールを付与されていたユーザーまたはロールのセキュリティ・ドメインに影響します。 - SQL*Plusユーザーによるデータベース・ロール使用の制限
SQL*Plusユーザーによるデータベース・ロールの使用を制限することで、侵入者による攻撃からデータベースを保護できます。 - ロール権限およびセキュア・アプリケーション・ロール
セキュア・アプリケーション・ロールを使用可能にできるのは、認可されたPL/SQLパッケージまたはプロシージャのみです。
親トピック: 権限とロール認可の構成
ユーザー・ロールについて
DDLの使用を制限するなど、ユーザー・ロールは様々な目的で利用できます。
- ユーザー・ロールの概要
ユーザー・ロールは、ユーザーまたは他のロールに一括で付与できる関連権限の名前付きグループです。 - ロールの機能
ロールとは、ユーザーに権限を素早く簡単に付与するために便利なものです。 - ロールの特性とそのメリット
権限管理に要する労力の削減など、ロールにはその管理を容易にする特別なプロパティがあります。 - ロールの通常の使用
通常は、権限を管理するためにロールを作成します。 - アプリケーション・ロールの一般的な使用方法
アプリケーション・ロールを使用して、アプリケーションを使用する権限を制御できます。 - ユーザー・ロールの一般的な使用方法
共通の権限付与要件があるデータベース・ユーザーのグループに対してユーザー・ロールを作成できます。 - ロールがユーザーの権限範囲に与える影響
各ロールと各ユーザーには、それぞれ独自のセキュリティ・ドメインがあります。 - PL/SQLブロックでのロールの機能
PL/SQLブロック内でのロールの動作は、ブロックのタイプと定義者権限または実行者権限によって決まります。 - ロールによるDDL使用の支援または制限
ユーザーがDDL文を正常に実行するには、その文に応じて1つ以上の権限が必要になります。 - オペレーティング・システムによるロールの支援方法
環境によっては、オペレーティング・システムを使用してデータベース・セキュリティを管理できます。 - 分散環境でのロールの機能
分散データベース環境では、必要なすべてのロールを分散(リモート)セッションのデフォルト・ロールとして設定する必要があります。
親トピック: ユーザー・ロールの管理
ユーザー・ロールの概要
ユーザー・ロールは、ユーザーまたは他のロールに一括で付与できる関連権限の名前付きグループです。
権限の管理および制御は、ロールを使用すると容易になります。
データベース内では、各ロール名を一意にする必要があり、すべてのユーザー名や他のすべてのロール名とは異なる名称にする必要があります。スキーマ・オブジェクトとは異なり、ロールはいずれのスキーマにも含まれません。したがって、ロールを作成するユーザーを、ロールに影響をおよぼすことなく削除できます。
ロールの機能
ロールとは、ユーザーに権限を素早く簡単に付与するために便利なものです。
Oracle Databaseで定義されているロールを使用することもできますが、必要な権限のみを含む独自のロールを作成すると、より継続的な制御が可能になります。Oracle Databaseで定義されているロールの権限は、Oracleによって変更または削除される場合があります。
ロールは、次の機能を備えています。
-
ロールには、システム権限またはオブジェクト権限を付与できます。
-
任意のロールを任意のデータベース・ユーザーに付与できます。
-
ユーザーに付与した各ロールは、任意の時点で使用可能または使用禁止にできます。ユーザーのセキュリティ・ドメインには、そのユーザーに対して現在使用可能になっているすべてのロールの権限が含まれており、ユーザーに対して現在使用禁止になっているロールの権限は除外されています。権限を選択的に使用できるように、Oracle Databaseでは、データベース・アプリケーションとユーザーがロールを使用可能または使用禁止にできます。
-
1つのロールを別のロールにも付与できます。ただし、ロールをそのロール自体に付与したり、循環的に付与することはできません。たとえば、
role2があらかじめロールrole1に付与されている場合、ロールrole1をロールrole2に付与することはできません。 -
ロールがパスワード認証ロールまたはセキュア・アプリケーション・ロールでない場合は、ユーザーに間接的に付与できます。間接的に付与するロールとは、ユーザーにすでに付与されている別のロールを通じて同じユーザーに付与するロールのことです。たとえば、ユーザー
psmithにrole1ロールを付与するとします。その後、role2ロールとrole3ロールをrole1ロールに付与します。これで、role2とrole3の2つのロールは、role1に含まれることになります。つまり、psmithには、直接付与されたrole1に加え、role2ロールとrole3ロールが間接的に付与されたことになります。psmithに対して、直接付与されたロールrole1を使用可能にすると、間接的に付与されたロールrole2およびrole3も同様に使用可能になります。 -
必要に応じて、直接付与されたロールをデフォルト・ロールにできます。直接付与されたロールに対してデフォルト・ロール・ステータスを使用可能または使用禁止にするには、
ALTER USER文のDEFAULT ROLE句を使用します。DEFAULT ROLE句は、ユーザーに直接付与されたロールのみを示すようにしてください。ユーザーに直接付与されたロールを検索するには、DBA_ROLE_PRIVSデータ・ディクショナリ・ビューを問い合せます。このビューには、ユーザーに間接的に付与されたロールは含まれません。他のロールに付与されたロールを検索するには、ROLE_ROLE_PRIVSビューを問い合せます。 -
ロールがパスワード認証ロールまたはセキュア・アプリケーション・ロールの場合は、ユーザーに間接的に付与することも、デフォルト・ロールにすることもできません。このタイプのロールは、ユーザーに直接付与する必要があります。通常、パスワード認証ロールまたはセキュア・アプリケーション・ロールを使用可能にするには、
SET ROLE文を使用します。
親トピック: ユーザー・ロールについて
ロールの特性とそのメリット
権限管理に要する労力の削減など、ロールにはその管理を容易にする特別なプロパティがあります。
表4-5では、データベース内での権限管理をさらに容易にする、ロールの特性について説明します。
表4-5 ロールの特性とその説明
| プロパティ | 説明 |
|---|---|
|
権限管理に要する労力の削減 |
複数のユーザーに対して同一の権限セットを明示的に付与するかわりに、関連するユーザー・グループのための権限をまとめて1つのロールに付与しておき、そのグループの各メンバーにはそのロールを付与するだけですみます。 |
|
動的な権限管理 |
あるグループの権限を変更する必要がある場合、修正が必要なのは、そのロールの権限のみです。グループのロールを付与した全ユーザーのセキュリティ・ドメインには、そのロールに対して加えられる変更が自動的に反映されます。 |
|
権限の選択的な可用性 |
あるユーザーに付与したロールを、選択的に使用可能または使用禁止にできます。この機能によって、どのような状況でもユーザー権限を個々に制御できます。 |
|
アプリケーションによる認識 |
ロールの存在はデータ・ディクショナリに記録されます。したがって、ユーザーが特定のユーザー名でアプリケーションを実行したときに、アプリケーションがディクショナリに問い合せ、自動的に特定のロールを使用可能(または使用禁止)にするようにアプリケーションを設計できます。 |
|
アプリケーション固有のセキュリティ |
ロールの使用はパスワードを使用して保護できます。正しいパスワードを入力するとロールが使用可能になるようなアプリケーションを作成できます。パスワードを知らないユーザーは、ロールを使用可能にできません。 |
データベース管理者は、データベース・アプリケーションのロールを頻繁に作成します。セキュア・アプリケーション・ロールに対して、アプリケーションを実行するために必要なすべての権限を付与する必要があります。それから保護アプリケーション・ロールを他のロールやユーザーに付与できます。1つのアプリケーションは複数の異なるロールを持つことができ、各ロールには異なる権限のセットが付与され、アプリケーション使用中のデータ・アクセスの可否が決定されます。
DBAはパスワード付きのロールを作成することで、そのロールに付与されている権限が無許可で使用されるのを防止できます。通常、アプリケーションは起動時に適切なロールが使用可能になるように設計されます。そのため、アプリケーション・ユーザーは、アプリケーション・ロールのパスワードを知る必要がありません。
関連トピック
親トピック: ユーザー・ロールについて
ロールの通常の使用
通常は、権限を管理するためにロールを作成します。
理由は次のとおりです。
-
データベース・アプリケーションに対する権限の管理
-
ユーザー・グループに対する権限の管理
図4-1で、ロールの2通りの使用方法について説明します。
親トピック: ユーザー・ロールについて
アプリケーション・ロールの一般的な使用方法
アプリケーション・ロールを使用して、アプリケーションを使用する権限を制御できます。
アプリケーション・ロールには、特定のデータベース・アプリケーションを実行するために必要な権限をすべて付与する必要があります。次に、そのセキュア・アプリケーション・ロールを、他のロールや特定のユーザーに対して付与します。
1つのアプリケーションに対して複数の異なるロールを設定し、アプリケーション使用時のデータ・アクセスの量や範囲にあわせて異なる権限セットを各ロールに割り当てることができます。
親トピック: ユーザー・ロールについて
ユーザー・ロールの一般的な使用方法
共通の権限付与要件があるデータベース・ユーザーのグループに対してユーザー・ロールを作成できます。
ユーザーの権限は、セキュア・アプリケーション・ロールと権限をユーザー・ロールに付与し、そのユーザー・ロールを適切なユーザーに付与することで管理できます。
親トピック: ユーザー・ロールについて
ロールがユーザーの権限範囲に与える影響
各ロールと各ユーザーには、それぞれ独自のセキュリティ・ドメインがあります。
ロールのセキュリティ・ドメインには、ロール自体に付与されている権限と、そのロールに付与されたロールに対して付与されている権限が含まれます。
ユーザーのセキュリティ・ドメインには、対応するスキーマ内のすべてのスキーマ・オブジェクトに対する権限、ユーザーに付与された権限、そして現在使用可能なユーザーに付与されたロールの権限が含まれます。(ロールをあるユーザーに対して使用可能にすると同時に、他のユーザーに対して使用禁止にできます。)このドメインには、ロールPUBLICに付与された権限とロールも含まれます。PUBLICロールは、データベース内のすべてのユーザーを表します。
親トピック: ユーザー・ロールについて
PL/SQLブロックでのロールの機能
PL/SQLブロック内でのロールの動作は、ブロックのタイプと定義者権限または実行者権限によって決まります。
- 定義者権限を持つ名前付きブロックで使用されるロール
定義者権限で実行される名前付きPL/SQLブロックでは、すべてのロールは使用禁止になっています。 - 実行者権限を持つ名前付きブロックおよび無名PL/SQLブロックで使用されるロール
実行者権限を使用して実行する名前付きPL/SQLブロックと無名PL/SQLブロックは、使用可能なロールを通じて付与された権限に基づいて実行されます。
親トピック: ユーザー・ロールについて
定義者権限を持つ名前付きブロックで使用されるロール
定義者権限で実行される名前付きPL/SQLブロックでは、すべてのロールは使用禁止になっています。
名前付きPL/SQLブロックには、ストアド・プロシージャやファンクション、トリガーがあります。
ロールは権限チェックに使用されず、定義者権限プロシージャ内ではロールを設定できません。
PL/SQLブロックが定義者権限で実行する場合、SESSION_ROLESデータ・ディクショナリ・ビューには現在使用可能なすべてのロールが表示されます。定義者権限で実行される名前付きPL/SQLブロックでSESSION_ROLESを問い合せると、その問合せは行を戻しません。
関連項目:
SESSION_ROLESデータ・ディクショナリ・ビューの詳細は、Oracle Databaseリファレンスを参照してください
親トピック: PL/SQLブロックでのロールの機能
実行者権限を持つ名前付きブロックおよび無名PL/SQLブロックで使用されるロール
実行者権限を使用して実行する名前付きPL/SQLブロックと無名PL/SQLブロックは、使用可能なロールを通じて付与された権限に基づいて実行されます。
現行ロールは、実行者権限PL/SQLブロック内での権限チェックに使用されます。動的SQLを使用して、セッション内にロールを設定できます。
関連項目:
-
実行者権限と定義者権限を使用して名前解決と権限チェックを行う方法については、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
-
PL/SQLの動的SQLの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: PL/SQLブロックでのロールの機能
ロールによるDDL使用の支援または制限
ユーザーがDDL文を正常に実行するには、その文に応じて1つ以上の権限が必要になります。
たとえば、表を作成するには、CREATE TABLEまたはCREATE ANY TABLEシステム権限が必要です。
別のユーザーに属する表のビューを作成するには、CREATE VIEWまたはCREATE ANY VIEWシステム権限のみでなく、その表に対するSELECT object権限またはSELECT ANY TABLEシステム権限も必要です。
Oracle Databaseでは、特定のDDL文での特定の権限の使用を制限することで、ロールを介して受け取った権限への依存性を回避します。次の規則は、DDL文に関する権限の制限を示しています。
-
DDL操作の実行をユーザーに許可するすべてのシステム権限およびオブジェクト権限は、ロールを介して受け取った場合でも使用可能。例:
-
システム権限:
CREATETABLE、CREATEVIEWおよびCREATEPROCEDURE権限 -
オブジェクト権限: 表に対する
ALTERおよびINDEX権限表に対する
REFERENCESオブジェクト権限は、ロールを介して付与されている場合、表の外部キー定義には使用できません。
-
-
DDL文を発行するために必要なDML操作をユーザーが実行できるようにするすべてのシステム権限とオブジェクト権限は、ロールを通じて受け取った場合には使用できません。
CREATE VIEW文が使用されているとき、セキュリティ・ドメインにはロールが含まれません。たとえばユーザーはSELECTANYTABLEシステム権限を付与されている場合、または表に対するSELECTobject権限をロールを通じて付与されている場合、これらの権限のどちらを使用しても他のユーザーに属する表でビューは作成できません。これは、ビューが定義者権限のオブジェクトであり、ビューを作成するとき、自分にロールを通じて付与された権限はいずれも(システム権限もオブジェクト権限も)使用できないためです。権限が直接自分に付与されている場合は、この権限を使用できます。しかし権限が後で取り消されると、ビュー定義は無効になり(エラーとなり)、再度使用する前に再コンパイルする必要があります。
ロールを介して受け取った権限の使用許可と使用制限について、次の例で具体的に説明します。
次のようなユーザーを想定します。
-
CREATEVIEWシステム権限を持つロールが付与されています。 -
employees表に対するSELECTobject権限を持つロールが直接付与されています。 -
departments表に対するSELECTobject権限が直接付与されています。
前述の権限がこのユーザーに直接的および間接的に付与されているとすると、
-
このユーザーは
employees表とdepartments表の両方に対してSELECT文を発行できます。 -
このユーザーには、
employees表のCREATEVIEW権限とSELECT権限がロールを介して付与されていますが、employees表のSELECTobject権限がロールを介して付与されていたため、employees表のビューは作成できません。 -
このユーザーには
CREATEVIEW権限がロールを介して付与され、departments表のSELECT権限が直接付与されているため、departments表のビューは作成できます。
親トピック: ユーザー・ロールについて
オペレーティング・システムによるロールの支援方法
環境によっては、オペレーティング・システムを使用してデータベース・セキュリティを管理できます。
オペレーティング・システムを使用して、データベース・ロールの付与と取消し、パスワードの認証を管理できます。この機能は、すべてのオペレーティング・システムで利用できるとはかぎりません。
関連項目:
オペレーティング・システムによるロールの管理方法の詳細は、そのオペレーティング・システム固有のOracle Databaseマニュアルを参照してください。
親トピック: ユーザー・ロールについて
Oracle Databaseのインストールで事前に定義されているロール
Oracle Databaseには、データベース管理を容易にする一連の事前定義ロールが用意されています。
表4-6に示すこれらの事前定義ロールは、データベース作成の一部である標準スクリプト(catalog.sqlやcatproc.sqlなど)の実行時に、Oracleデータベースに対して自動的に定義され、共通ロールとみなされます。他のオプションや製品をインストールすると、他の事前定義のロールが作成される場合があります。DBA_ROLESデータ・ディクショナリ・ビューのROLEおよびORACLE_MAINTAINED列を問い合せると、Oracleで作成および管理されているロールを確認できます。ORACLE_MAINTAINEDの出力がYの場合、ロールの作成時に使用したスクリプトを使用する以外の方法でロールを変更しないでください。
表4-6 Oracle Databaseの事前定義ロール
| 事前定義のロール | 説明 |
|---|---|
|
|
関連項目: |
|
|
アドバンスト・キューイングを管理するための権限を提供します。 |
|
|
サポートされていませんが、主にリリース8.0との互換性のために残されています。 |
|
|
統合およびファイングレイン監査ポリシーの作成、 関連項目: 監査の実行者 |
|
|
監査データを表示および分析する権限を提供します 関連項目: 監査の実行者 |
|
|
システムにログインしたユーザーを定義するために、XDBプロトコルで使用されます。 関連項目: このロールを |
|
|
権限分析ポリシーの作成および管理に必要な権限を提供します。 関連項目: 詳細は、「権限分析を実行できるユーザー」を参照してください。 |
|
|
関連項目: CDBの管理の詳細は、『Oracle Database管理者ガイド』を参照してください。 |
|
|
このロールは、Oracle Databaseの以前のリリースとの互換性を考慮して用意されています。このロールに組み込まれている権限は、 ノート: このロールに依存せずに、データベース・セキュリティ用に独自のロールを設計することをお薦めします。このロールは、将来のリリースのOracle Databaseでは自動生成されない可能性があります。 関連項目: |
|
|
Oracle SpatialのCatalog Services for the Web(CSW)コンポーネントを管理するユーザー権限を提供します。 関連項目: 詳細は、Oracle Spatial and Graph開発者ガイドを参照してください。 |
|
|
Oracle Textの索引および索引プリファレンスの作成権限およびPL/SQLパッケージの使用権限を提供します。このロールはOracle Textユーザーに付与される必要があります。 関連項目: 詳細は、『Oracle Textアプリケーション開発者ガイド』を参照してください。 |
|
|
Oracleデータ・ウェアハウスおよび意思決定支援で使用されるリポジトリ標準であるCommon Warehouse Metadata(CWM)の管理権限を提供します。 関連項目: 詳細は、『Oracle Databaseデータ・ウェアハウス・ガイド』を参照してください。 |
|
|
Oracle Data Pumpを使用してOracleデータベースからデータをエクスポートする権限を提供します。 注意: このロールは非常に強力であり、データベース内の任意のスキーマの任意のデータへのユーザー・アクセスを提供します。このロールをユーザーに付与する場合は注意が必要です。 関連項目: 詳細は、『Oracle Databaseユーティリティ』を参照してください。 |
|
|
Oracle Data Pumpを使用してOracleデータベースにデータをインポートする権限を提供します。 注意: このロールは非常に強力であり、データベース内の任意のスキーマの任意のデータへのユーザー・アクセスを提供します。このロールをユーザーに付与する場合は注意が必要です。 関連項目: 詳細は、『Oracle Databaseユーティリティ』を参照してください。 |
|
|
このロールは、Oracle Databaseの以前のリリースとの互換性を考慮して用意されています。このロールに組み込まれている権限は、 ノート: このロールに依存せずに、データベース・セキュリティ用に独自のロールを設計することをお薦めします。このロールは、将来のリリースのOracle Databaseでは自動生成されない可能性があります。 関連項目: |
|
|
DBFS(データベース・ファイルシステム)パッケージおよびオブジェクトへのアクセスを提供します。 |
|
|
Javaストアド・プロシージャからEJBに接続する権限を提供します。 |
|
|
ユーザーは、Oracle Enterprise Manager (EM) Expressに接続して、EM Expressによって提供されるすべての機能(すべてのEM Express機能への読取りおよび書込みアクセス)を使用できます。 関連項目: 詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。 |
|
|
ユーザーは、EM Expressに接続して、読取り専用モードでページを表示できます。 関連項目: 詳細は、『Oracle Database 2日でデータベース管理者』を参照してください。 |
|
|
データ・ディクショナリ内のオブジェクトに対する |
|
|
エクスポート・ユーティリティ(後継はOracle Data Pump)を使用してデータベースの全インポートおよび増分エクスポートを実行するために必要な権限を提供します。含まれる権限は、 このロールは、エクスポート・ユーティリティおよびインポート・ユーティリティを簡単に使用できるように用意されています。 注意: このロールは非常に強力であり、データベース内の任意のスキーマの任意のデータへのユーザー・アクセスを提供します。このロールをユーザーに付与する場合は注意が必要です。 関連項目: 詳細は、『Oracle Databaseユーティリティ』 を参照してください。 |
|
|
関連項目: オプティマイザ統計の管理の詳細は、Oracle Database SQLチューニング・ガイドを参照してください。 |
|
|
Oracle Database Advanced Queuingで使用されるLDAPサーバーへの接続を確立する権限を提供します。 関連項目: 詳細は、『Oracle Databaseアドバンスト・キューイング・ユーザーズ・ガイド』を参照してください。 |
|
|
異機種間サービス(HS)PL/SQLパッケージの使用を希望するユーザーに対して 関連項目: 詳細は、『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』 を参照してください。 |
|
|
異機種間サービス(HS)PL/SQLパッケージの使用権限およびHS関連のデータ・ディクショナリ・ビューの問合せ権限を提供します。 関連項目: 詳細は、『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』 を参照してください。 |
|
|
異機種間サービスのデータ・ディクショナリ・ビューの問合せ権限を提供します。 関連項目: 詳細は、『Oracle Database Heterogeneous Connectivityユーザーズ・ガイド』を参照してください。 |
|
|
インポート・ユーティリティ(後継はOracle Data Pump)を使用してデータベースの全インポートを実行するために必要な権限を提供します。システム権限の詳細リスト(権限を表示するにはビュー このロールは、エクスポート・ユーティリティおよびインポート・ユーティリティを簡単に使用できるように用意されています。 注意: このロールは非常に強力であり、データベース内の任意のスキーマの任意のデータへのユーザー・アクセスを提供します。このロールをユーザーに付与する場合は注意が必要です。 関連項目: 詳細は、『Oracle Databaseユーティリティ』を参照してください。 |
|
|
Oracle Database Javaアプリケーション・デバッガの実行権限を提供します。 関連項目: Oracle Javaアプリケーションのセキュリティ管理の詳細は、『Oracle Database Java開発者ガイド』を参照してください。 |
|
|
このリリースでは非推奨となりました。 |
|
|
Oracle JVMで保護されたパッケージの更新を含む、Java 2を使用するための主要な権限を提供します。 関連項目: Oracle Javaアプリケーションのセキュリティ管理の詳細は、『Oracle Database Java開発者ガイド』を参照してください。 |
|
|
Java 2を使用するための制限された権限を提供します。 関連項目: Oracle Javaアプリケーションのセキュリティ管理の詳細は、『Oracle Database Java開発者ガイド』を参照してください。 |
|
|
Oracle Database Javaアプリケーションのポリシー表を更新する管理権限を提供します。 関連項目: Oracle Javaアプリケーションのセキュリティ管理の詳細は、『Oracle Database Java開発者ガイド』を参照してください。 |
|
|
データベース・セッションでJMXエージェントを起動およびメンテナンスする権限を提供します。 関連項目: Oracle Javaアプリケーションの管理の詳細は、『Oracle Database Java開発者ガイド』を参照してください。 |
|
|
関連項目: 詳細は、『Oracle Label Security管理者ガイド』を参照してください。 |
|
|
SQL Apply(ロジカル・スタンバイ・データベース)環境を管理する管理権限を提供します。 関連項目: 詳細は、『Oracle Data Guard概要および管理』を参照してください。 |
|
|
関連項目: 詳細は、Oracle Database SQLチューニング・ガイドを参照してください。 |
|
|
Oracle Enterprise Managerの管理エージェント・コンポーネントで必要とされる、データベースを監視および管理する権限を提供します。 関連項目: 詳細は、Oracle Database SQLチューニング・ガイドを参照してください。 |
|
|
Oracle OLAPの異なるスキーマでディメンション・オブジェクトを作成する管理権限を提供します。 関連項目: 詳細は、『Oracle OLAPユーザーズ・ガイド』を参照してください。 |
|
|
アプリケーション開発者に対し、Oracle OLAPの独自のスキーマでディメンション・オブジェクトを作成する権限を提供します。 関連項目: 詳細は、『Oracle OLAPユーザーズ・ガイド』を参照してください。 |
|
|
Oracle OLAPのセキュリティの管理権限を提供します。 関連項目: 詳細は、『Oracle OLAPユーザーズ・ガイド』を参照してください。 |
|
|
関連項目: 詳細は、Oracle Database SQLチューニング・ガイドを参照してください。 |
|
|
シードPDBから新しいPDBを作成する場合に作成されるローカル・ユーザーに自動的に付与されます。権限はこのロールに提供されません。 関連項目: シードを使用したPDBの作成の詳細は、『Oracle Database管理者ガイド』を参照してください。 |
|
|
Oracle Database Real Applicationセッションのグローバル・コールバックを登録および更新してプリンシパルをプロビジョニングする権限を提供します。 関連項目: 詳細は、『Oracle Database Real Application Security管理者および開発者ガイド』を参照してください。 |
|
|
リカバリ・カタログの所有者の権限を提供します。 関連項目: 詳細は、『Oracle Databaseバックアップおよびリカバリ・ユーザーズ・ガイド』を参照してください。 |
|
|
このロールは、Oracle Databaseの以前のリリースとの互換性を考慮して用意されています。このロールに組み込まれている権限は、 ノート: このロールに依存せずに、データベース・セキュリティ用に独自のロールを設計することをお薦めします。このロールは、将来のリリースのOracle Databaseでは自動生成されない可能性があります。 関連項目: |
|
|
権限受領者が 関連項目: |
|
|
データ・ディクショナリ内のオブジェクトに対する |
|
|
SODA APIを使用して、特にドキュメント・コレクションを作成、削除およびリストする権限を提供します。 |
|
|
Oracle SpatialのCatalog Services for the Web(CSW)コンポーネントを管理する管理権限を提供します。 関連項目: 詳細は、Oracle Spatial and Graph開発者ガイドを参照してください。 |
|
|
Oracle SpatialのWeb Feature Service(WFS)コンポーネントを管理する管理権限を提供します。 関連項目: 詳細は、Oracle Spatial and Graph開発者ガイドを参照してください。 |
|
|
Oracle SpatialのWeb Feature Service(WFS)コンポーネントに対するユーザー権限を提供します。 関連項目: 詳細は、Oracle Spatial and Graph開発者ガイドを参照してください。 |
|
|
Oracle Workspace Managerの管理権限を提供します。これにより、ユーザーは 関連項目: 詳細は、『Oracle Database Workspace Manager開発者ガイド』を参照してください。 |
|
|
権限受領者がXMLスキーマを、その所有者のみが使用したりアクセスするために登録するのではなく、グローバルに登録できるようにします。また権限受領者がOracle XML DB Repositoryにアクセスしているときはアクセス制御リスト(ACL)チェックを回避できるようにもします。 関連項目: XMLスキーマとXML DBリポジトリの詳細は、『Oracle XML DB開発者ガイド』を参照してください。 |
|
|
権限受領者が実行者権限ハンドラを定義して、XMLリポジトリのトリガーのリソース構成を作成または更新できるようにします。デフォルトでは、このロールは 関連項目: Oracle DatabaseのXMLリポジトリのトリガーの詳細は、『Oracle XML DB開発者ガイド』を参照してください。 |
|
|
権限受領者がHTTPSを使用してOracle DatabaseのWebサービスにアクセスできるようにします。ただし、パブリックなデータベース内のオブジェクトに対するユーザー・アクセスは提供されません。パブリック・アクセスを許可するには、ユーザーに 関連項目: Oracle DatabaseのWebサービスの詳細は、『Oracle XML DB開発者ガイド』を参照してください。 |
|
|
権限受領者がHTTPを使用してOracle DatabaseのWebサービスにアクセスできるようにします。ただし、パブリックなデータベース内のオブジェクトに対するユーザー・アクセスは提供されません。パブリック・アクセスを許可するには、ユーザーに 関連項目: Oracle DatabaseのWebサービスの詳細は、『Oracle XML DB開発者ガイド』を参照してください。 |
|
|
権限受領者が、Oracle DatabaseのWebサービスを介してパブリック・オブジェクトにアクセスできるようにします。 関連項目: Oracle DatabaseのWebサービスの詳細は、『Oracle XML DB開発者ガイド』を参照してください。 |
|
|
Oracle Database Real Application Securityでは、権限受領者が中間層キャッシュを管理できます。 関連項目: 詳細は、『Oracle Database Real Application Security管理者および開発者ガイド』を参照してください。 |
|
|
Oracle Database Real Application Securityでは、権限受領者がセッションのネームスペースおよび属性を管理および操作できます。このロールをReal Application Securityセッション・ユーザーに付与します。 関連項目: Real Application Securityセッションの管理の詳細は、『Oracle Database Real Application Security管理者および開発者ガイド』を参照してください。 |
|
|
Oracle Database Real Application Securityでは、権限受領者が 関連項目: 詳細は、『Oracle Database Real Application Security管理者および開発者ガイド』を参照してください。 |
|
|
Oracle Database Real Application Securityでは、権限受領者がセッションを作成、接続、切離しおよび破棄する機能を含むセッションのライフ・サイクルを管理できます。このロールをアプリケーション接続ユーザーまたはReal Application Securityディスパッチャに付与します。 関連項目: Real Application Securityセッションの管理の詳細は、『Oracle Database Real Application Security管理者および開発者ガイド』を参照してください。 |
ノート:
各インストールで独自のロールが作成されて、必要な権限のみが割り当てられます。このようにして、使用中の権限の詳細な制御が維持されます。このプロセスにより、Oracle Databaseで定義されるロールがOracle Databaseで変更や削除されたとき、既存のロール、権限、またはプロシージャを調整する必要もなくなります。たとえば、CONNECTロールが現在持っている権限はCREATE SESSIONの1つのみです。
親トピック: ユーザー・ロールの管理
ロールの作成
パスワードの有無に関係なく、認証されるロールを作成できます。外部ロールまたはグローバル・ロールも作成できます。
- ロールの作成について
ロールはCREATE ROLE文を使用して作成できます。 - パスワードを使用して認証されるロールの作成
IDENTIFIED BY句を使用して、パスワードで認証されるロールを作成できます。 - パスワード認証のないロールの作成
IDENTIFIED BY句を省略することで、パスワードを必要としないロールを作成できます。 - 外部またはグローバルのロールの作成
外部ロールまたはグローバル・ロールを使用すると、データベース外部のサービスでデータベース・ロールを認証済ユーザーに関連付けることができます。 - ロールの変更
ALTER ROLE文で、ロールの認可方法を変更できます。
親トピック: ユーザー・ロールの管理
ロールの作成について
ロールはCREATE ROLE文を使用して作成できます。
ロールを作成する場合、CREATE ROLEシステム権限が必要です。通常、このシステム権限はセキュリティ管理者のみが持っています。作成した直後のロールには、権限は対応付けられていません。次のステップで、新しいロールに権限または他のロールを付与します。
作成する各ロールには、データベースの既存のユーザー名やロール名とは異なる、一意の名前を指定する必要があります。ロールはどのユーザーのスキーマ内にも格納されません。マルチバイト文字セットを使用するデータベースでは、各ロール名に少なくとも1つのシングルバイト・キャラクタを含めることをお薦めします。ロール名がマルチバイト・キャラクタのみの場合、暗号化されたロール名とパスワードの組合せの安全性は大幅に低くなります。パスワードのガイドラインは、パスワードの保護に関するガイドラインのガイドライン1を参照してください。
IDENTIFIED BY句を使用して、パスワードによってロールを認可します。この句は、このロールを付与された特定ユーザーがロールを使用をする前に、どの認可方式で認可される必要があるかを指定します。この句を指定しないか、またはNOT IDENTIFIEDを指定すると、認可がなくてもロールが使用可能になります。ロールには、必要な認可方式として次の方式を指定できます。
-
パスワードを使用したデータベースによる認可
-
指定のパッケージを使用したアプリケーションによる認可
-
オペレーティング・システム、ネットワークまたはその他の外部ソースによる外部認可
-
エンタープライズ・ディレクトリ・サービスによるグローバル認可
パスワードで保護されたロールの作成の代替手段として、セキュア・アプリケーション・ロールの使用をお薦めします。
ロールの作成に関する次の制限に注意してください。
-
ロールとユーザーに同じ名前を付けることはできません。
-
このロールがCDB共通ロールでないかぎり、ロール名を
COMMON_USER_PREFIXパラメータの値(デフォルトではC##)で始めることはできません。
パスワードを使用して認証されるロールの作成
IDENTIFIED BY句を使用して、パスワードで認証されるロールを作成できます。
-
パスワード認証されるロールを作成するには、
IDENTIFIED BY句が指定されたCREATE ROLE文を使用します。
例:
CREATE ROLE clerk IDENTIFIED BY password;ノート:
- パスワードで保護されるロールは、プロキシ・セッションで有効にできます。セキュア・アプリケーション・ロールとパスワードで保護されるロールの両方が、セッションでロールを有効にするための安全な方法を提供します。パスワードを維持して安全でないチャネルで転送する必要がある場合、または複数の人がパスワードを知る必要がある場合は、パスワードで保護されるロールではなく、セキュアなパスワード・ロールを使用することをお薦めします。プロキシ・セッションでパスワードで保護されるロールは、ロールを設定するために自動化が使用される状況に適しています。
SQLNET.ALLOWED_LOGON_VERSION_SERVERパラメータを11以上に設定する場合、IDENTIFIED BY句で作成されたロールを再作成する必要があります。
親トピック: ロールの作成
パスワード認証のないロールの作成
IDENTIFIED BY句を省略することで、パスワードを必要としないロールを作成できます。
-
句を指定せずに
CREATE ROLE文を使用して、パスワード認証のないロールを作成します。
例:
CREATE ROLE salesclerk;
親トピック: ロールの作成
外部またはグローバルのロールの作成
外部ロールまたはグローバル・ロールを使用すると、データベース外部のサービスでデータベース・ロールを認証済ユーザーに関連付けることができます。
データベース外部ロールは、オペレーティング・システムとRADIUSグループに関連付けられます。このように、データベース・ユーザー認可はデータベースの外部から管理できます。
外部ユーザーは、ロールを使用可能にする前に、オペレーティング・システムやサード・パーティ・サービスなどの外部サービスによって認可されている必要があります。
グローバル・ロールは、集中管理されたユーザーまたはOracle Enterprise User Securityを使用してグローバルに認証されたユーザーによって使用されます。グローバル・ユーザーは、ログイン時にロールの使用が可能になる前に、エンタープライズ・ディレクトリ・サービスによってロールの使用を認可されている必要があります。
- 外部で認可されるロールを作成するには、
CREATE ROLE文にIDENTIFIED EXTERNALLY句を含めます。例:
CREATE ROLE clerk_external IDENTIFIED EXTERNALLY;
-
グローバルに認可されるロールを作成するには、
CREATE ROLE文を使用します。例:
CREATE ROLE clerk_global IDENTIFIED GLOBALLY;
集中管理されたユーザーなどを含むディレクトリ・サービス・マッピングを介して、ロールをユーザーにグローバルに認可できます。
ロールの変更
ALTER ROLE文で、ロールの認可方法を変更できます。
ロールの認可方式を変更するには、ALTER ANY ROLEシステム権限またはADMINオプション付きのロールが付与されている必要があります。
セキュア・アプリケーション・ロールまたはパスワード認証ロールはユーザーに直接付与する必要があることに注意してください。ルートで共通ロールを作成する場合、それをローカル・ロールに変更できないことに注意してください。
-
ロールを変更するには、
ALTER ROLE文を使用します。たとえば、ロールを有効にする前にユーザーが外部ソースによって認可されている必要があるように指定する目的で
clerkロールを変更するとします。ALTER ROLE clerk IDENTIFIED EXTERNALLY;
親トピック: ロールの作成
ロール認可のタイプの指定
データベースや外部ソースなどの様々なソースを通じて認可されるように、ロールを構成できます。
- データベースを使用したロールの認可
データベースによって認可されたロールを、ロール・パスワードを割り当てることで保護できます。 - アプリケーションを使用したロールの認可
アプリケーション・ロールを使用可能にできるのは、認可されたPL/SQLパッケージを使用するアプリケーションのみです。 - 外部ソースを使用したロールの認可
Oracle Databaseでは外部ロールの使用がサポートされますが、一定の制限があります。 - オペレーティング・システムを使用したロールの認可
Oracle Databaseではオペレーティング・システムを通じたロール認証がサポートされますが、一定の制限があります。 - ネットワーク・クライアントを使用したロールの認可
Oracle Databaseではネットワーク・クライアントによるロール認証がサポートされますが、一定のセキュリティ・リスクが伴います。 - エンタープライズ・ディレクトリ・サービスによるグローバル・ロールの認可
グローバル・ロールを使用すると、グローバル・ユーザーの認可の取得先をエンタープライズ・ディレクトリ・サービスに限定できます。
親トピック: ユーザー・ロールの管理
データベースを使用したロールの認可
データベースによって認可されたロールを、ロール・パスワードを割り当てることで保護できます。
パスワードで保護されたロールが付与されている場合は、SET ROLE文でそのロールの正しいパスワードを指定することで、そのロールを有効または無効にできます。パスワード認証されるロールは、そのロールがデフォルト・ロールのリストに含まれている場合でも、ログオン時に認証することはできません。SET ROLE文で必須パスワードを使用して、明示的に使用可能にする必要があります。
親トピック: ロール認可のタイプの指定
アプリケーションを使用したロールの認可
アプリケーション・ロールを使用可能にできるのは、認可されたPL/SQLパッケージを使用するアプリケーションのみです。
アプリケーション開発者は、アプリケーション内部にパスワードを埋め込むことによってロールを保護する必要はありません。かわりに、アプリケーション・ロール(セキュア・アプリケーション・ロール)を作成して、ロールを使用可能にすることを認可するPL/SQLパッケージを指定できます。
-
認可されたPL/SQLパッケージによって使用可能になるロールを作成するには、
CREATE ROLESQL文でIDENTIFIED USINGpackage_name句を使用します。
たとえば、ロールadmin_roleがアプリケーション・ロールであり、このロールは、PL/SQLパッケージhr.admin内に定義されているモジュールによってのみ使用可能にできることを示すとします。
CREATE ROLE admin_role IDENTIFIED USING hr.admin;
外部ソースを使用したロールの認可
Oracle Databaseでは外部ロールの使用がサポートされますが、一定の制限があります。
外部ロールは、データベースにローカルに定義できますが、グローバル・ユーザー、グローバル・ロールまたはデータベース内の他のロールには付与できません。オペレーティング・システムまたはネットワーク・クライアントによって認可されるロールを作成できます。
-
外部ソースを使用してロールを認可するには、
IDENTIFIED EXTERNALLY句を指定してCREATE ROLE文を使用します。
例:
CREATE ROLE accts_rec IDENTIFIED EXTERNALLY;
親トピック: ロール認可のタイプの指定
オペレーティング・システムを使用したロールの認可
Oracle Databaseではオペレーティング・システムを通じたロール認証がサポートされますが、一定の制限があります。
オペレーティング・システムによるロール認証が有効となるのは、そのオペレーティング・システムによって、オペレーティング・システム権限をアプリケーションと動的にリンクできる場合のみです。
ユーザーがアプリケーションを開始すると、オペレーティング・システムはオペレーティング・システム権限をそのユーザーに付与します。付与されたオペレーティング・システム権限は、アプリケーションに対応付けられたロールと一致します。この時点で、アプリケーションはアプリケーション・ロールを使用可能にできます。アプリケーションが終了すると、先に付与されたオペレーティング・システム権限は、そのユーザーのオペレーティング・システム・アカウントから取り消されます。
-
ロールをオペレーティング・システムによって認可する場合は、オペレーティング・システム・レベルで各ユーザーの情報を構成します。この操作は、オペレーティング・システムによって異なります。
ロールがオペレーティング・システムによって付与されている場合は、そのオペレーティング・システムによるロールの認可は不要です。
親トピック: ロール認可のタイプの指定
ネットワーク・クライアントを使用したロールの認可
Oracle Databaseではネットワーク・クライアントによるロール認証がサポートされますが、一定のセキュリティ・リスクが伴います。
ユーザーがデータベースにOracle Net経由で接続する場合、オペレーティング・システムはデフォルトではユーザーのロールを認証できません。この接続ではOracle Netが必要となるため、共有サーバー構成を介した接続が含まれます。リモート・ユーザーはネットワーク接続を介して別のオペレーティング・システム・ユーザーになりすますおそれがあるため、デフォルトでこのような制限が適用されています。REMOTE_OS_ROLESをFALSE(デフォルト)に設定することをお薦めします。
-
このようなセキュリティの危険性の心配がないときに、ネットワーク・クライアントに対してオペレーティング・システムのロール認証を使用する場合は、データベース初期化パラメータ・ファイル内の初期化パラメータ
REMOTE_OS_ROLESをTRUEに設定します。
この変更は、次回インスタンスを起動して、データベースをマウントするときに有効になります。
親トピック: ロール認可のタイプの指定
エンタープライズ・ディレクトリ・サービスによるグローバル・ロールの認可
グローバル・ロールを使用すると、グローバル・ユーザーの認可の取得先をエンタープライズ・ディレクトリ・サービスに限定できます。
グローバル・ロールは、権限とロールを付与することによってデータベース内でローカルに定義しますが、グローバル・ロール自体をそのデータベース内のユーザーや他のロールに付与することはできません。グローバル・ユーザーがデータベースへの接続を試みると、エンタープライズ・ディレクトリへの問合せが実行され、そのユーザーに対応付けられたグローバル・ロールが取得されます。グローバル・ロールは、エンタープライズ・ユーザー・セキュリティの構成要素の1つです。グローバル・ロールは1つのデータベースにのみ適用されますが、エンタープライズ・ディレクトリに定義されたエンタープライズ・ロールに付与できます。エンタープライズ・ロールは複数データベースのグローバル・ロールを含んだディレクトリ構造であり、エンタープライズ・ユーザーに付与できます。
-
エンタープライズ・ディレクトリ・サービスによって認可されるグローバル・ロールを作成するには、
IDENTIFIED GLOBALLY句を指定してCREATE ROLE文を使用します。
例:
CREATE ROLE supervisor IDENTIFIED GLOBALLY;
関連項目:
-
ユーザーのグローバル認証とグローバル認可、およびエンタープライズ・ユーザー管理におけるロールの概要については、ユーザーのグローバル認証とグローバル認可を参照してください
-
エンタープライズ・ユーザー管理の実装の詳細は、『Oracle Databaseエンタープライズ・ユーザー・セキュリティ管理者ガイド』を参照してください。
親トピック: ロール認可のタイプの指定
ロールの付与と取消し
ロールに権限を付与またはロールから権限を取り消して、そのロールをユーザーまたは別のロールに付与できます。
- ロールの付与と取消しについて
システム権限やオブジェクト権限をロールに付与できます。そしていずれのロールも任意のデータベース・ユーザーや他のロールに付与できます。 - ロールを付与したり、取り消すことができるユーザー
GRANT ANY ROLEシステム権限を使用して、グローバル・ロール以外の任意のロールを他のユーザーまたはロールに付与したり、それらのロールを取り消したりできます。 - プログラム・ユニットに対するロールの付与と取消し
関数、プロシージャおよびPL/SQLパッケージ・プログラム・ユニットにロールを付与できます。
親トピック: ユーザー・ロールの管理
ロールの付与と取消しについて
システム権限やオブジェクト権限をロールに付与できます。そしていずれのロールも任意のデータベース・ユーザーや他のロールに付与できます。
ただし、ロールを自身に付与したり、循環的に付与することはできません。つまり、ロールYがすでにロールXに付与されている場合は、ロールXをロールYに付与することはできません。
権限を選択的に使用できるように、Oracle Databaseでは、データベース・アプリケーションとユーザーがロールを使用可能または使用禁止にできます。ユーザーに付与した各ロールは、任意の時点で使用可能または使用禁止にできます。ユーザーのセキュリティ・ドメインには、そのユーザーに対して現在使用可能になっているすべてのロールの権限が含まれており、ユーザーに対して現在使用禁止になっているロールの権限は除外されています。
ロールに対して付与されたロールは、間接的に付与されたロールと呼ばれます。この種のロールは、ユーザーに対して明示的に使用可能または使用禁止にできます。ただし、別のロールを含んだロールを使用可能にすると、直接的に付与されたロールに含まれる間接的に付与されたロールは、すべて暗黙のうちに使用可能になります。
GRANT文を使用してロールを付与し、REVOKE文を使用して取り消します。ロールに対して権限を付与または取り消す場合にも同じ文を使用します。
セキュアなロール(つまりIDENTIFIED BYロール、IDENTIFIED USINGロールまたはIDENTIFIED EXTERNALLYロール)は、他のセキュアなロールと非セキュアなロールのどちらにも付与することはできません。SET ROLE文を使用して、セッションに対してセキュアなロールを有効化できます。
親トピック: ロールの付与と取消し
ロールを付与したり、取り消すことができるユーザー
GRANT ANY ROLEシステム権限を使用して、グローバル・ロール以外の任意のロールを他のユーザーまたはロールに付与したり、それらのロールを取り消したりできます。
グローバル・ロールはOracle Internet Directoryなどのディレクトリ内で管理されますが、その権限は単一のデータベース内に含まれます。デフォルトでは、ユーザーSYSまたはSYSTEMには、GRANT ANY ROLE権限があります。このシステム権限は非常に強力であるため、付与する場合は控えめに設定する必要があります。
ADMIN OPTION付きでロールを付与されたユーザーは、データベースの他のユーザーやロールに対してロールを付与したり、そのロールを取り消すことができます。つまり、このオプションによって、選択的なロール付与の管理が可能になります。
親トピック: ロールの付与と取消し
プログラム・ユニットに対するロールの付与と取消し
関数、プロシージャおよびPL/SQLパッケージ・プログラム・ユニットにロールを付与できます。
ロールは、プログラム・ユニットの実行中に有効になります。ただし、プログラム・ユニットのコンパイル中を除きます。これにより、ロールを直接ユーザーに付与しないで、PL/SQLコードの権限を一時的にエスカレートできます。また、アプリケーションのセキュリティが強化され、最低限の権限の原則を規定できます。
-
プログラム・ユニットに対してロールを付与または取り消すには、
GRANTまたはREVOKE文を使用します。
次の例は、PL/SQLパッケージcheckstats_pkgへの同じロールの付与方法を示しています。
GRANT clerk_admin TO package psmith.checkstats_pkg;
この例は、PL/SQLパッケージcheckstats_pkgのclerk_adminロールの取消し方法を示しています。
REVOKE clerk_admin FROM package psmith.checkstats_pkg;
次の例は、プロシージャpsmith.check_stats_procへのロールclerk_adminの付与方法を示しています。
GRANT clerk_admin TO PROCEDURE psmith.checkstats_proc;
親トピック: ロールの付与と取消し
ロールの削除
ロールの削除は、そのロールを付与されていたユーザーまたはロールのセキュリティ・ドメインに影響します。
つまり、削除したロールを付与されていたすべてのユーザーとロールのセキュリティ・ドメインは、削除したロール権限がなくなったことを反映するために変更されます。
削除したロールによって間接的に付与されていたロールもすべて、関連するセキュリティ・ドメインから削除されます。ロールを削除することによって、すべてのユーザーのデフォルト・ロール・リストからそのロールが自動的に削除されます。
オブジェクトの存在はロールを介して受け取った権限に依存しないため、ロールが削除されても、表や他のオブジェクトは削除されません。
ロールを削除するには、DROP ANY ROLEシステム権限またはADMINオプション付きのロールが付与されている必要があります。
-
ロールを削除するには、
DROP ROLE文を使用します。
たとえば、ロールCLERKを削除する方法は次のとおりです。
DROP ROLE clerk;
親トピック: ユーザー・ロールの管理
SQL*Plusユーザーによるデータベース・ロール使用の制限
SQL*Plusユーザーによるデータベース・ロールの使用を制限することで、侵入者による攻撃からデータベースを保護できます。
- セキュリティに関する潜在的な問題となる非定型ツールの使用
非定型ツールは、不正なユーザーがこのようなツールにアクセスできると問題が発生する可能性があります。 - PRODUCT_USER_PROFILEシステム表がロールを制限できるしくみ
SYSTEMスキーマPRODUCT_USER_PROFILE表で、各ユーザーのSQL*Plus環境のSQLおよびSQL*Plusコマンドを無効にできます。 - ストアド・プロシージャがビジネス・ロジックをカプセル化できるしくみ
ストアド・プロシージャは、ビジネス・ロジックによって権限の使用をカプセル化し、適正なビジネス・トランザクションのコンテキストでのみ権限が実行されるようにします。
親トピック: ユーザー・ロールの管理
セキュリティに関する潜在的な問題となる非定型ツールの使用
非定型ツールは、不正なユーザーがこのようなツールにアクセスできると問題が発生する可能性があります。
事前作成データベース・アプリケーションは、アプリケーション使用中にユーザー・ロールを使用可能および使用禁止にすることも含めて、ユーザーのアクションを明示的に制御します。一方、SQL*Plusなどの非定型の問合せツールを使用すると、ユーザーは付与されたロールを使用可能および使用禁止にする文も含めて、あらゆるSQL文を発行できます(正常終了する場合としない場合があります)。
アプリケーションのユーザーは、そのアプリケーションに付加された権限を使用し、非定型ツールによってデータベース表に破壊的なSQL文を発行する恐れがあります。
たとえば、次の状況を想定します。
-
Vacation(休暇)アプリケーションには、それに対応する
vacationロールがあります。 -
この
vacationロールには、emp_tab表に対してSELECT、INSERT、UPDATEおよびDELETE文を発行する権限が含まれています。 -
Vacationアプリケーションは、
vacationロールを介して取得した権限の使用を制御します。
ここで、vacationロールを付与されたユーザーを考えてみます。このユーザーが、Vacationアプリケーションを使用するかわりに、SQL*Plusを実行するとします。この時点でユーザーが制限を受けるのは、明示的に付与された権限またはロール(vacationロールを含む)を介して付与されている権限からのみです。SQL*Plusは非定型の問合せツールであるため、設計されたデータベース・アプリケーションを使用する場合のように、ユーザーは一連の事前定義アクションに制限されることはありません。ユーザーは、emp_tab表のデータの問合せや変更を自由に実行できます。
PRODUCT_USER_PROFILEシステム表がロールを制限できるしくみ
SYSTEMスキーマPRODUCT_USER_PROFILE表で、各ユーザーのSQL*Plus環境のSQLおよびSQL*Plusコマンドを無効にできます。
Oracle DatabaseでなくSQL*Plusでこのセキュリティが実行されます。GRANT、REVOKE、およびSET ROLEコマンドへのアクセスを制限して、ユーザーによる各自のデータベース権限の変更を制御することもできます。
PRODUCT_USER_PROFILE表を使用すると、ユーザーがアプリケーションでアクティブにできないロールをリストできます。また、様々なコマンド(SET ROLEなど)の使用を明示的に禁止できます。
たとえば、PRODUCT_USER_PROFILE表にエントリを作成して、次の処理を実行できます。
-
SQL*Plusで、
clerkおよびmanagerロールの使用を禁止できます。 -
SQL*Plusで、
SET ROLEの使用を禁止できます。
ユーザーMarlaが、SQL*Plusを使用してデータベースに接続するとします。Marlaには、clerk、managerおよびanalystのロールがあります。前述のPRODUCT_USER_PROFILEのエントリによって、Marlaは、SQL*Plusでanalystロールのみを使用できます。また、GinnyがSET ROLE文を発行しようとすると、SET ROLEの使用を禁止するPRODUCT_USER_PROFILE表のエントリが原因で、発行を明示的に禁止されます。
PRODUCT_USER_PROFILE表は、様々な理由からセキュリティが完全には保証されないことに注意してください。前述の例では、SET ROLEがSQL*Plusで禁止されていますが、Marlaに直接付与されているその他の権限がある場合、MarlaはSQL*Plusを使用してそれらの権限を使用できます。
ストアド・プロシージャがビジネス・ロジックをカプセル化できるしくみ
ストアド・プロシージャは、ビジネス・ロジックによって権限の使用をカプセル化し、適正なビジネス・トランザクションのコンテキストでのみ権限が実行されるようにします。
たとえば、アプリケーション開発者は、employees表にある従業員の名前および住所を、通常の勤務時間内にのみ更新するプロシージャを作成できます。
また、セキュリティ管理者は、人事部門の担当者にemployees表のUPDATE権限を付与するのではなく、プロシージャのみに権限を付与できます。これによって、人事部門の担当者が権限を使用できるのはプロシージャのコンテキスト内のみになり、employees表を直接更新できなくなります。
ロール権限およびセキュア・アプリケーション・ロール
セキュア・アプリケーション・ロールを使用可能にできるのは、認可されたPL/SQLパッケージまたはプロシージャのみです。
PL/SQLパッケージ自体は、アプリケーションへのアクセスを制御するために必要なセキュリティ・ポリシーを反映します。
この方法でロールを作成すると、起動対象アプリケーションに対してこのタイプのロールを使用可能にする場合に制限が加えられます。たとえば、アプリケーションはユーザーがプロキシを介して接続しているかどうかをチェックするなど、認証およびカスタマイズ認可を実行できます。
このタイプのロールでは、パスワードがアプリケーションのソース・コードに埋め込まれたり、表に格納されることがないため、セキュリティが強化されます。このように、データベースが実行する処理は、セキュリティ・ポリシーの実装に基づいており、その定義は1箇所(アプリケーション内ではなくデータベース内)に格納されます。ポリシーの変更が必要な場合は、アプリケーションを修正することなく1箇所の変更で済みます。ポリシーはロールと結び付けられているため、ユーザーがデータベースに接続する方法に関係なく、結果は常に同じです。
セキュア・アプリケーション・ロールを使用可能にするには、ユーザーがセキュア・アプリケーション・ロールによって付与された権限を行使する前のログイン時に、基礎となるパッケージをアプリケーションから直接起動して実行する必要があります。ログイン・トリガーを使用してセキュア・アプリケーション・ロールを使用可能にすることも、このタイプのロールをデフォルト・ロールにすることもできません。
セキュア・アプリケーション・ロールを使用可能にすると、認可されたPL/SQLパッケージがコール・スタックにあることが検証されます。つまり、認可されたPL/SQLパッケージがロールを使用可能にするコマンドを発行しているかどうかが検証されます。
セキュア・アプリケーション・ロールは、データベース接続の存在を保証するために使用できます。セキュア・アプリケーション・ロールはパッケージによって実装されるロールであるため、このパッケージによって、ユーザーが中間層を介して、または特定のIPアドレスからデータベースに接続できることを検証できます。この方法により、セキュア・アプリケーション・ロールは、ユーザーがアプリケーション外のデータにアクセスすることを防ぎます。ユーザーは、付与されているアプリケーション権限のフレームワーク内で作業するように規定されます。
親トピック: ユーザー・ロールの管理
PDBロックダウン・プロファイルを使用したPDBでの操作の制限
PDBロックダウン・プロファイルを使用して、プラガブル・データベース(PDB)での一連のユーザー操作を制限できます。
- PDBロックダウン・プロファイルについて
PDBロックダウン・プロファイルは、操作グループを制御する名前付きの機能セットです。 - PDBロックダウン・プロファイルの仕組み
PDBロックダウン・プロファイルは、共有IDを使用する機能に対して様々なレベルでアクセスを制限するように設計されています。 - PDB_OS_CREDENTIAL初期化パラメータ
データベースがextprocエージェントを使用して外部プロシージャにアクセスするときに、PDB_OS_CREDENTIAL初期化パラメータによって、PDBからオペレーティング・システムと対話するときに使用されるオペレーティング・システム・ユーザーのIDが決まります。 - PDBロックダウン・プロファイルからメリットを受ける機能
共有IDを使用する機能が、PDBロックダウン・プロファイルからメリットを受けます。 - PDBロックダウン・プロファイルの継承
PDBロックダウン・プロファイルには、CDBルート、アプリケーション・ルート、およびこれらに関連付けられているPDB間の継承動作があります。 - デフォルトのPDBロックダウン・プロファイル
Oracle Databaseには、サイト要件にあわせてカスタマイズできる一連のデフォルトのPDBロックダウン・プロファイルが用意されています。 - PDBロックダウン・プロファイルの作成
PDBロックダウン・プロファイルを作成するには、CREATE LOCKDOWN PROFILEシステム権限が必要です。 - PDBロックダウン・プロファイルの有効化または無効化
PDBロックダウン・プロファイルを有効化または無効化するには、PDB_LOCKDOWN初期化パラメータを使用します。 - PDBロックダウン・プロファイルの削除
PDBロックダウン・プロファイルを削除するには、DROP LOCKDOWN PROFILEシステム権限があり、CDBルートまたはアプリケーションルートにログインすることが必要です。
親トピック: 権限とロール認可の構成
PDBロックダウン・プロファイルについて
PDBロックダウン・プロファイルは、操作グループを制御する名前付きの機能セットです。
PDBロックダウン・プロファイルは、PDB内のユーザーが使用可能な機能とオプションを制限します。PDB_OS_CREDENTIAL初期化パラメータでは、PDBに一意のオペレーティング・システム・ユーザーを指定して、オペレーティング・システム・アクセスを制限できます。また、PATH_PREFIXおよびCREATE_FILE_DEST句がPDBの作成時に指定された場合は、ファイル・システム・アクセスを制限します。
場合によっては、操作を個別に有効または無効にできます。たとえば、PDBロックダウン・プロファイルに、ALTER SYSTEM文で使用する特定の句を無効にする設定を含めることができます。
PDBロックダウン・プロファイルは、ユーザーに対して定義されるリソース制限と同様、機能が提供する機能性へのユーザー・アクセスを制限します。名前が示すように、CDB内でPDBロックダウン・プロファイルを、アプリケーション・コンテナやPDBまたはアプリケーションPDBに対して使用します。カスタム・プロファイルを作成して、サイトの要件に対応することができます。PDBプロファイルを使用すると、アプリケーションのカスタム・セキュリティ・ポリシーを定義できます。さらに、ベース・プロファイルと呼ばれる別のプロファイルに基づくロックダウン・プロファイルを作成することができます。このプロファイルは、ベース・プロファイルが更新されたときに動的に更新されるように構成するか、ベース・プロファイルが更新されたときに静的である(変更されない)ように構成できます。ロックダウン・プロファイルは、Oracle Cloudとオンプレミスの両方の環境用に設計されています。
PDBロックダウン・プロファイルを作成する一般的な手順では、最初にCREATE LOCKDOWN PROFILE文を使用してプロファイルをCDBルートまたはアプリケーション・ルートに作成し、その後でALTER LOCKDOWN PROFILE文を使用してそれに制限を加えます。
PDBロックダウン・プロファイルを有効にするには、ALTER SYSTEM文を使用して、PDB_LOCKDOWNパラメータを設定します。既存のPDBロックダウン・プロファイルに関する情報を確認するには、CDBルートまたはアプリケーション・ルートに接続してDBA_LOCKDOWN_PROFILESデータ・ディクショナリ・ビューを問い合せます。ローカル・ユーザーは、V$LOCKDOWN_RULES動的データ・ディクショナリ・ビューを問い合せてPDBロックダウン・パラメータの内容を確認できます。
PDBロックダウン・プロファイルの仕組み
PDBロックダウン・プロファイルは、共有IDを使用する機能に対して様々なレベルでアクセスを制限するように設計されています。
ユースケースとしては、高、中および低レベルのロックダウン・プロファイルの作成があります。高いレベルではアクセスが大幅に制限されますが、低いレベルではアクセスが有効になります。
CDBルートまたはアプリケーション・ルートにログインするときに、次のオプション句をサポートしているCREATE LOCKDOWN PROFILE文を発行して、ロックダウン・プロファイルを作成します。
-
FROM static_base_profileは、既存のプロファイルからの値を使用して、新しいロックダウン・プロファイルを作成します。既存のプロファイルへの以降の変更は、新しいプロファイルには影響しません。 -
INCLUDING dynamic_base_profileは、既存のプロファイルの値を使用して新しいロックダウン・プロファイルを作成しますが、この新しいロックダウン・プロファイルは、基本プロファイルを構成するDISABLE STATEMENTルール、および基本プロファイルへの以降の変更を継承するという点が異なります。
文を発行するユーザーは、現在のコンテナでCREATE LOCKDOWN PROFILEシステム権限を持っている必要があります。制約を追加および削除するには、ALTER LOCKDOWN PROFILE文を使用します。ユーザーはCDBルートまたはアプリケーション・ルートでALTER文を発行する必要があり、現在のコンテナでALTER LOCKDOWN PROFILEシステム権限を持っている必要があります。
ロックダウン・プロファイルは、PDB_LOCKDOWN初期化パラメータを使用して指定します。このパラメータによって、PDBロックダウン・プロファイルが指定のPDBに適用されるかどうかが決定します。このパラメータは、次のレベルで設定できます。
-
PDB
プロファイルは、設定されるPDBにのみ適用されます。
-
アプリケーション・コンテナ
プロファイルは、アプリケーション・コンテナ内のすべてのアプリケーションPDBに適用されます。値を変更できるのは、アプリケーション共通の
SYSDBA権限または共通のALTER SYSTEM権限を持つアプリケーション共通ユーザー、あるいは共通のSYSDBA権限または共通のALTER SYSTEM権限を持つCDB共通ユーザーのみです。 -
CDB
プロファイルはすべてのPDBに適用されます。共通の
SYSDBA権限または共通のALTER SYSTEM権限を持つ共通ユーザーは、特定のPDBに対するCDB全体の設定をオーバーライドできます。
PDBのPDB_LOCKDOWNパラメータが、このPDBのコンテナ(CDBまたはアプリケーション・コンテナ)とは異なるロックダウン・プロファイルの名前に設定されている場合は、一連のルールによって制限の間の相互作用が制御されます。
例4-5 PDBロックダウン・プロファイルの作成
この例では、CREATE LOCKDOWN PROFILE権限を持つ共通ユーザーとしてCDBルートに接続します。ALTER SYSTEM FLUSH SHARED POOL以外のすべてのALTER SYSTEM文を無効にする、mediumというプロファイルを作成します。
CREATE LOCKDOWN PROFILE medium;
ALTER LOCKDOWN PROFILE medium DISABLE STATEMENT=('ALTER SYSTEM');
ALTER LOCKDOWN PROFILE medium ENABLE STATEMENT=('ALTER SYSTEM') CLAUSE=('FLUSH SHARED POOL');
同じ共通ユーザーとして、このプロファイルを必要とする各PDBに接続し、ALTER SYSTEMを使用してPDB_LOCKDOWN初期化パラメータをmediumに設定します。たとえば、hrpdbについてPDB_LOCKDOWNをmediumに設定できますが、salespdbには設定できません。
次の例では、mediumからmedium2プロファイルを作成します。
CREATE LOCKDOWN PROFILE medium2 FROM medium;PDB_OS_CREDENTIAL初期化パラメータ
データベースがextprocエージェントで外部プロシージャにアクセスする際に、PDB_OS_CREDENTIAL初期化パラメータはPDBからオペレーティング・システムと対話するときに採用されるオペレーティング・システム・ユーザーのIDを決定します。
PDB_OS_CREDENTIAL初期化パラメータの値として指定されている名前の資格証明によって記述されたオペレーティング・システム・ユーザーを使用することで、オペレーティング・システムとの対話を、低い権限のユーザーとして実行できます。このようにして、あるPDBに属するデータを別のPDBに接続しているユーザーからアクセスできないように保護する機能が提供されます。資格証明は、DBMS_CREDENTIALパッケージ内のCREATE_CREDENTIALプロシージャを使用して作成されるオブジェクトです。
通常、Oracleオペレーティング・システム・ユーザーは高い権限を持つユーザーです。オペレーティング・システムの対話にこのアカウントを使用することはお薦めしません。また、異なるPDBからのオペレーティング・システムの対話に同じOSユーザーを使用すると、特定のPDBに属するデータが危険にさらされる可能性があります。
PDBロックダウン・プロファイルからメリットを受ける機能
共有IDを使用する機能が、PDBロックダウン・プロファイルからメリットを受けます。
PDBがIDを共有する際、権限が上昇する可能性があります。たとえば、ネットワーク・レベルや、PDBが共通オブジェクトにアクセスする、またはデータベース・リンク経由で接続する際にIDを共有できます。セキュリティを向上するため、CDB管理者はアクセスを区画化することで、ユーザーがPDBで実行可能な操作を制限する場合があります。
IDがPDB間で共有される場合、昇格する権限が存在することがあります。ロックダウン・プロファイルを使用すると、この権限の昇格を防ぐことができます。IDは、次の状況で共有できます。
-
オペレーティング・システム・レベルでは、データベースがファイルやプロセスなどのオペレーティング・システム・リソースと対話するとき
-
ネットワーク・レベルでは、データベースが他のシステムと通信し、ネットワークIDが重要なとき
-
データベースの内部では、PDBが共通オブジェクトへのアクセスまたは作成を行うとき、またはデータベース・リンクなどの機能を使用してコンテナ境界を越えて通信するとき
共有IDを使用し、PDBロックダウン・プロファイルからメリットを受ける機能は、いくつかのカテゴリに分かれます。
-
ネットワーク・アクセス機能。これはネットワークを使用してPDB外部と通信する操作です。たとえば、PL/SQLパッケージ
UTL_TCP、UTL_HTTP、UTL_MAIL、UTL_SNMP、UTL_INADDRおよびDBMS_DEBUG_JDWPは、この種の操作を実行します。現在、ネットワークIDを共有してこの種のアクセスを制御するためにACLが使用されています。 -
共通ユーザーまたは共通オブジェクトのアクセス。これは、PDBのローカル・ユーザーが共通ユーザー・アカウントを介して通信したり、共通スキーマのオブジェクトにアクセスする操作です。この種の操作には、共通スキーマでのオブジェクトの追加または置換、共通オブジェクトへの権限の付与、共通ディレクトリ・オブジェクトへのアクセス、共通ユーザーへの
INHERIT PRIVILEGESロールの付与、および共通ユーザーに対するユーザー・プロキシの操作が含まれます。 -
オペレーティング・システム・アクセス。たとえば、
UTL_FILEまたはDBMS_FILE_TRANSFERPL/SQLパッケージへのアクセスを制限できます。 -
接続。たとえば、共通ユーザーによるPDBへの接続を制限したり、
SYSOPER管理権限を持つローカル・ユーザーによる制限モードでオープンしているPDBへの接続を制限することができます。 -
管理機能。たとえば、
ALTER SYSTEM、ALTER SESSIONおよびALTER DATABASEの使用を制限できます。 -
データベースのオプション。たとえば、ロックダウン・プロファイルを使用して、Oracleのパーティション化やOracle Databaseアドバンスト・キューイングなどのデータベース・オプションへのアクセスを無効にできます。
PDBロックダウン・プロファイルの継承
PDBロックダウン・プロファイルには、CDBルート、アプリケーション・ルート、およびこれらに関連付けられているPDB間の継承動作があります。
-
PDBとそれぞれのルートの間の継承パスは次のとおりです。
-
CDB PDBの
PDB_LOCKDOWNパラメータ設定は、CDBルートのPDB_LOCKDOWNパラメータ設定より優先されます。同様に、アプリケーションPDBのPDB_LOCKDOWN設定は、アプリケーション・ルートのPDB_LOCKDOWN設定より優先されます。 -
CDB PDB(またはアプリケーションPDB)に
PDB_LOCKDOWNパラメータが設定されていない場合、PDBはCDBルート(またはアプリケーション・ルート)のPDB_LOCKDOWNパラメータの設定を継承します。 -
アプリケーション・ルートに
PDB_LOCKDOWNパラメータが設定されていない場合、アプリケーション・ルートはCDBルートのPDB_LOCKDOWNパラメータの設定を継承します。
-
-
CDB PDBまたはアプリケーションPDBの
PDB_LOCKDOWNパラメータがCDBロックダウン・プロファイルに設定されている場合、PDBはCDBルートまたはアプリケーション・ルートのPDB_LOCKDOWNパラメータによって設定されているすべてのロックダウン・プロファイルを無視します。 -
PDBロックダウン・パラメータは、自身に最も近い祖先(つまり、アプリケーション・ルートまたはCDBルート)で設定されたCDBロックダウン・プロファイルから取得された無効なルールを含む、アプリケーション・ロックダウン・プロファイルに規定されたルールを継承できます。これは、アプリケーション・ルートまたはCDBルートの
PDB_LOCKDOWNパラメータがCDBロックダウン・プロファイルに設定されているときに、アプリケーションPDBのPDB_LOCKDOWNパラメータがアプリケーション・ロックダウン・プロファイルに設定されている場合に適用されます。 -
場合によっては、CDBロックダウン・プロファイルおよびアプリケーション・ロックダウン・プロファイルを構成するルールの間に競合が発生することがあります。この場合、CDBロックダウン・プロファイルのルールが優先されます。たとえば、CDBロックダウン・プロファイルの
OPTION_VALUE句の設定が、アプリケーション・ロックダウン・プロファイルのOPTION_VALUE句の設定よりも優先されます。
デフォルトのPDBロックダウン・プロファイル
Oracle Databaseには、サイト要件にあわせてカスタマイズできる一連のデフォルトのPDBロックダウン・プロファイルが用意されています。
デフォルトでは、これらのプロファイルのほとんどが空です。これらは、デプロイメント要件に応じて、構成するプレースホルダまたはテンプレートとして設計されています。
これらのプロファイルに関する詳細情報は次のとおりです。
-
PRIVATE_DBAASには、プライベート・クラウドDatabase-as-a-Service (DBaaS)のデプロイメントに適した制限が組み込まれています。これらの制限は次のとおりです。-
各PDBのデータベース管理者は同じである必要があります。
-
別のユーザーがデータベースに接続することが許可されます。
-
別のアプリケーションが許可されます。
PRIVATE_DBAASは、ユーザーがPDBに接続することを許可しますが、ユーザーがOracle Databaseの管理機能を使用できないようにします。 -
-
SAASには、Software-as-a-Service (SaaS)デプロイメントに適した制限が組み込まれています。これらの制限は次のとおりです。-
各PDBのデータベース管理者は同じである必要があります。
-
別のユーザーがデータベースに接続することが許可されます。
-
同じアプリケーションを使用する必要があります。
SAASロックダウン・プロファイルには、PRIVATE_DBAASプロファイルよりも厳しい制限があります。ユーザーは異なってもかまいませんが、アプリケーション・コードは同一です。ユーザーは直接接続できず、アプリケーションを使用してのみ接続する必要があります。ユーザーにはすべての管理機能を実行する権限が付与されません。 -
-
PUBLIC_DBAASには、パブリック・クラウドDatabase-as-a-Service (DBaaS)のデプロイメントに適した制限が組み込まれています。制限事項は次のとおりです。-
PDBごとに異なるDBA
-
異なるユーザー
-
異なるアプリケーション
PUBLIC_DBAASロックダウン・プロファイルは、最も制限が厳しいロックダウン・プロファイルです。 -
PDBロックダウン・プロファイルの作成
PDB ロックダウンプロファイルを作成する場合、CREATE LOCKDOWN PROFILEシステム権限が必要です。
PDBロックダウン・プロファイルの有効化または無効化
PDBロックダウン・プロファイルを有効または無効にするには、PDB_LOCKDOWN初期化パラメータを使用します。
ALTER SYSTEM SET PDB_LOCKDOWNを使用して、次のすべてのコンテキストでロックダウン・プロファイルを有効にすることができます。
-
CDB (すべてのPDBに影響します)
-
アプリケーション・ルート(コンテナ内のすべてのアプリケーションPDBに影響します)
-
アプリケーションPDB
-
PDB
ノート:
プロファイルを有効にするためにインスタンスを再起動する必要はありません。ALTER SYSTEM SET PDB_LOCKDOWN文を実行すると、プロファイル・ルールは即時に有効になります。
CDBルートでPDB_LOCKDOWNを設定すると、PDB_LOCKDOWNがコンテナ・レベルで設定されていないかぎり、すべてのPDBおよびアプリケーション・ルートがこの設定を継承します。ロックダウン・プロファイルを無効にするには、PDB_LOCKDOWNをnullに設定します。CDBルートでこのパラメータをnullに設定すると、ロックダウン・プロファイルは、PDB内でプロファイルを明示的に設定したもの以外のすべてのPDBに対して無効になります。
SYSDBA管理権限またはALTER SYSTEMシステム権限が共通付与されたCDB共通ユーザーは、CDBルートで作成されたロックダウン・プロファイルにのみPDB_LOCKDOWNを設定できます。アプリケーション共通のSYSDBA管理権限またはALTER SYSTEMシステム権限を持つアプリケーション共通ユーザーは、アプリケーション・ルートで作成されたロックダウン・プロファイルにのみPDB_LOCKDOWNを設定できます。
オブジェクト権限の管理
オブジェクト権限を使用すると、表や索引などのスキーマ・オブジェクトに対するアクションを実行できます。
- オブジェクト権限について
オブジェクト権限では、特定のスキーマ・オブジェクトに対して特定のアクションを実行する権限を付与します。 - オブジェクト権限を付与できるユーザー
ユーザーは、自分のスキーマに含まれているスキーマ・オブジェクトに関しては、すべてのオブジェクト権限が自動的に付与されています。 - オブジェクト権限の付与と取消し
オブジェクトへの権限の付与およびオブジェクトからの権限の取消しは、ユーザーに直接またはロールを介して行うことができます。 - READオブジェクト権限とSELECTオブジェクト権限
READおよびSELECT権限で、異なる層の問合せ権限を付与できます。 - シノニムでのオブジェクト権限の使用
CREATE SYNONYM文で、データベース・オブジェクトのシノニムを作成します。 - アプリケーション共通オブジェクトの共有
メタデータ・リンク、データ・リンクおよび拡張データ・リンクをアプリケーション・ルートで共有できるように、データベース・オブジェクトを構成できます。
親トピック: 権限とロール認可の構成
オブジェクト権限について
オブジェクト権限では、特定のスキーマ・オブジェクトに対して特定のアクションを実行する権限を付与します。
各タイプのスキーマ・オブジェクトごとに、異なるオブジェクト権限があります。オブジェクト権限の例には、departments表から行を削除する権限があります。
クラスタ、索引、トリガー、データベース・リンクなど、一部のスキーマ・オブジェクトには、対応付けられたオブジェクト権限がありません。これらのオブジェクトの使用は、システム権限によって決定されます。たとえば、クラスタを変更するには、ユーザーはそのクラスタを所有しているか、またはALTER ANY CLUSTERシステム権限が必要です。
たとえば、次のことをする権利がオブジェクト権限です。
-
エディションの使用
-
表の更新
-
他のユーザーの表からの行の選択
-
他のユーザーのストアド・プロシージャの実行
関連項目:
-
オブジェクト権限とそれぞれで許可されている操作のリストは、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: オブジェクト権限の管理
オブジェクト権限を付与できるユーザー
ユーザーは、自分のスキーマに含まれているスキーマ・オブジェクトに関しては、すべてのオブジェクト権限が自動的に付与されています。
GRANT ANY OBJECT PRIVILEGEシステム権限があるユーザーは、GRANT文のWITH GRANT OPTION句を使用してもしなくても、指定したオブジェクト権限を別のユーザーに付与できます。また、GRANT ANY OBJECT PRIVILEGE権限を持つユーザーは、その権限を使用して、オブジェクト所有者またはGRANT ANY OBJECT PRIVILEGE権限を持つ他のユーザーによって付与されたオブジェクト権限を取り消すことができます。
権限受領者がGRANT ANY OBJECT PRIVILEGE権限を持っていない場合、またはGRANT文のWITH GRANT OPTION句を使用せずに権限を付与された場合、そのユーザーは権限を他のユーザーに付与できません。
WITH GRANT OPTIONは、ユーザーへのオブジェクト権限の付与でのみ使用できます。ロールへのオブジェクト権限の付与では使用できません。
関連項目:
GRANTおよびGRANT ANY OBJECT PRIVILEGEの詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: オブジェクト権限の管理
オブジェクト権限の付与と取消し
オブジェクトへの権限の付与およびオブジェクトからの権限の取消しは、ユーザーに直接またはロールを介して行うことができます。
- オブジェクト権限の付与と取消しについて
オブジェクト権限は、ユーザーとロールに対して付与したり、取り消すことができます。 - ALL句がすべての使用可能なオブジェクト権限を付与または取り消すしくみ
オブジェクトの各タイプには異なるオブジェクト権限が対応付けられていますが、これらはALL句で制御できます。
親トピック: オブジェクト権限の管理
オブジェクト権限の付与と取消しについて
オブジェクト権限は、ユーザーとロールに対して付与したり、取り消すことができます
オブジェクト権限をロールに付与した場合は、その権限を選択的に使用可能にできます。オブジェクト権限を付与するにはGRANT文を使用し、オブジェクト権限を取り消すにはREVOKE文を使用できます。
親トピック: オブジェクト権限の付与と取消し
ALL句がすべての使用可能なオブジェクト権限を付与または取り消すしくみ
オブジェクトの各タイプには異なるオブジェクト権限が対応付けられていますが、これらはALL句で制御できます。
ALL [PRIVILEGES]を指定して、オブジェクトに対するすべての使用可能なオブジェクト権限の付与または取消しが可能です。ALLは権限ではありません。ショートカットのようなもので、つまり1つのGRANT文およびREVOKE文ですべてのオブジェクト権限を付与または取り消すための方法です。すべてのオブジェクト権限がALLショートカットを使用して付与された場合でも、権限を個別に取り消すことができます。
同様に、個別に付与した権限をALLを指定してすべて取り消すこともできます。ただし、REVOKE ALLによって整合性制約が削除される場合(整合性制約は取り消そうとしているREFERENCES権限に依存しているため)は、REVOKE文にCASCADE CONSTRAINTSオプションを指定する必要があります。
例4-6では、CASCADE CONSTRAINTSを使用してHRスキーマ内の注文表に対するすべての権限を取り消しています。
例4-6 CASCADE CONSTRAINTSを使用したすべてのオブジェクト権限の取消し
REVOKE ALL ON ORDERS FROM HR CASCADE CONSTRAINTS;
親トピック: オブジェクト権限の付与と取消し
READオブジェクト権限とSELECTオブジェクト権限
READおよびSELECT権限で、異なる層の問合せ権限を付与できます。
- READおよびSELECTオブジェクト権限の管理について
ユーザーにREADまたはSELECTのオブジェクト権限を付与できます。 - データベース内の任意の表を問い合せるためのREADオブジェクト権限の使用のユーザーへの許可
READ ANY TABLEシステム権限で、データベース内の任意の表を問い合せることができるREADオブジェクト権限を付与します。 - READおよびREAD ANY TABLE権限に対する制限
READ権限とREAD ANY TABLE権限では特別な制限があります。
親トピック: オブジェクト権限の管理
READおよびSELECTオブジェクト権限の管理について
ユーザーにREADまたはSELECTのオブジェクト権限を付与できます。
これらの権限は、ユーザーに許可するアクセス・レベルに応じて付与します。
次のガイドラインに従ってください。
-
ユーザーが表、ビュー、マテリアライズド・ビューまたはシノニムの問合せのみをできるようにする場合、
READオブジェクト権限を付与する必要があります。例:GRANT READ ON HR.EMPLOYEES TO psmith;
-
ユーザーが、問合せの実行に加えて次のアクションを実行できるようにする場合、ユーザーに
SELECTオブジェクト権限を付与する必要があります。-
LOCK TABLEtable_nameIN EXCLUSIVE MODE; -
SELECT ... FROMtable_nameFOR UPDATE;
例:
GRANT SELECT ON HR.EMPLOYEES TO psmith;
-
いずれの場合も、ユーザーpsmithはSELECT文を使用して問合せを実行します。
データベース内の任意の表を問い合せるためのREADオブジェクト権限の使用のユーザーへの許可
READ ANY TABLEシステム権限で、データベース内の任意の表を問い合せることができるREADオブジェクト権限を付与します。
-
データベース内の任意の表に対する
READオブジェクト権限をユーザーが保持できるようにするには、そのユーザーにREAD ANY TABLEシステム権限を付与します。
例:
GRANT READ ANY TABLE TO psmith;
READオブジェクト権限と同様にREAD ANY TABLEシステム権限では、ユーザーは排他モードで表をロックしたり、更新操作用に表を選択したりできません。反対に、SELECT ANY TABLEシステム権限では、ユーザーは任意の表の問合せ以外に、SELECT ... FOR UPDATE文を使用して表の行をロックしたり、表全体をロックできます。
親トピック: READオブジェクト権限とSELECTオブジェクト権限
READおよびREAD ANY TABLE権限に対する制限
READ権限とREAD ANY TABLE権限では特別な制限があります。
これらの権限は次のとおりです。
-
READオブジェクト権限は、SQL92_SECURITY標準の要件には影響を及ぼしません。SQL92_SECURITY初期化パラメータがTRUEに設定されている場合、UPDATEまたはDELETE文を実行するためにUPDATEまたはDELETE以外にSELECTオブジェクト権限をユーザーに付与する必要があるという要件が緩和されて、SELECTのかわりにREADで十分であるということにはなりません。 -
Oracle Database Vaultが有効な場合、
SQL92_SECURITY初期化パラメータは自動的にTRUEに設定されることに注意してください。したがって、ユーザーにREADオブジェクト権限またはREAD ANY TABLEシステム権限のみが付与されている場合、UPDATEおよびDELETE文は失敗します。この場合、ユーザーにSELECTオブジェクト権限を付与するか、ユーザーが信頼できるユーザーの場合はSELECT ANY TABLEシステム権限を付与する必要があります。
親トピック: READオブジェクト権限とSELECTオブジェクト権限
シノニムでのオブジェクト権限の使用
CREATE SYNONYM文で、データベース・オブジェクトのシノニムを作成します。
表、ビュー、順序、演算子、プロシージャ、ストアド・ファンクション、パッケージ、マテリアライズド・ビュー、Javaクラス・スキーマ・オブジェクト、ユーザー定義オブジェクト・タイプのオブジェクトのシノニムに加え、別のシノニムのシノニムを作成できます。
ユーザーにシノニムを使用する権限を付与すると、基礎オブジェクトで付与されたオブジェクト権限は、ユーザーがベース・オブジェクトを名前で参照するかシノニムを使用して参照するかに関係なく適用されます。
たとえば、ユーザーOEが次のシノニムをCUSTOMERS表に作成するとします。
CREATE SYNONYM customer_syn FOR CUSTOMERS;
それから、OEはcustomer_synシノニムに対するREAD権限をユーザーHRに付与します。
GRANT READ ON customer_syn TO HR;
ユーザーHRは、次のどちらかの問合せを試みます。
SELECT COUNT(*) FROM OE.customer_syn; SELECT COUNT(*) FROM OE.CUSTOMERS;
どちらの問合せも同じ結果になります。
COUNT(*)
----------
319
シノニムを他のユーザーに権限付与すると、権限付与はシノニム自体に適用されるのでなく、シノニムが表す基礎オブジェクトに適用されることに注意してください。たとえば、ユーザーHRが自分の権限についてALL_TAB_PRIVSデータ・ディクショナリ・ビューを問い合せると、次のことを知ります。
SELECT TABLE_SCHEMA, TABLE_NAME, PRIVILEGE
FROM ALL_TAB_PRIVS
WHERE TABLE_SCHEMA = 'OE';
TABLE_SCHEMA TABLE_NAME PRIVILEGE
------------ ---------- ------------------
OE CUSTOMER READ
OE OE INHERIT PRIVILEGES
結果にはこのユーザーが、他の権限に加えて、customer_synシノニムの基礎オブジェクト、つまりOE.CUSTOMER表に対するREAD権限を持っていることが示されます。
この時点でユーザーOEがcustomer_synシノニムに対するREAD権限をHRから取り消した場合に、HRが自分の権限を再度調べたときの結果を次に示します。
TABLE_SCHEMA TABLE_NAME PRIVILEGE ------------ ---------- ------------------ OE OE INHERIT PRIVILEGES
ユーザーHRは、OE.CUSTOMER表に対するREAD権限を失っています。このユーザーがOE.CUSTOMERS表を問い合せると、次のエラーが表示されます。
SELECT COUNT(*) FROM OE.CUSTOMERS; ERROR at line 1: ORA-00942: table or view does not exist
親トピック: オブジェクト権限の管理
アプリケーション共通オブジェクトの共有
メタデータ・リンク、データ・リンクおよび拡張データ・リンクをアプリケーション・ルートで共有できるように、データベース・オブジェクトを構成できます。
- メタデータリンク・アプリケーション共通オブジェクト
メタデータ・リンクを使用すると、アプリケーション・プラガブル・データベース(PDB)のデータベース・オブジェクトとアプリケーション・ルートのオブジェクトとの間でメタデータを共有できます。 - データリンク・アプリケーション共通オブジェクト
データ・リンクにより、共通オブジェクトの参照と権限を管理します。 - 拡張データリンク・アプリケーション共通オブジェクト
拡張データ・リンクで、アプリケーションのプラガブル・データベース(PDB)とアプリケーション・ルートからのデータを組み合せることができます。
関連項目:
アプリケーション共通オブジェクト(メタデータリンク・オブジェクト、データリンク・オブジェクトおよび拡張データリンク・オブジェクト)の作成の詳細は、Oracle Database管理者ガイドを参照してください
親トピック: オブジェクト権限の管理
メタデータリンク・アプリケーション共通オブジェクト
メタデータ・リンクを使用すると、アプリケーション・プラガブル・データベース(PDB)のデータベース・オブジェクトとアプリケーションルートのオブジェクトとの間でメタデータを共有できます。
メタデータ・リンクは、一様に定義されたオブジェクト(オラクル社提供のPL/SQLパッケージなど)について、オブジェクトのメタデータのコピー(PL/SQLパッケージのソース・コードなど)を1つのみ格納するため、ディスクとメモリーの要件を軽減するために役立ちます。これにより、このメタデータへの変更が1つの場所(アプリケーション・ルート)で行われるため、アップグレード操作のパフォーマンスが向上します。
メタデータ・リンクは、アプリケーション・ルートから構成する必要があります。DBMS_PDB.SET_MEDATADATA_LINKED PL/SQLプロシージャを使用すると、データベース・オブジェクトをメタデータ・リンクに変更できます。
次の例は、DBMS_PDB.SET_METADATA_LINKEDプロシージャを使用して、hr_mgrスキーマのupdate_emp_ratingプロシージャをメタデータリンク・アプリケーション共通オブジェクトに変更する方法を示しています。
例4-7 オブジェクトをメタデータリンク・アプリケーション共通オブジェクトに変更する方法
BEGIN DBMS_PDB.SET_METADATA_LINKED ( SCHEMA_NAME => 'hr_mgr', OBJECT_NAME => 'update_emp_rating', NAMESPACE => 1); END; /
いずれの共通ユーザーもメタデータ・リンクを所有できます。メタデータ・リンクは、作成者がアプリケーション・ルートで所有するアプリケーション共通オブジェクトのメタデータを共有するためにのみ使用できます。
オブジェクトにメタデータ・リンクがあるかどうかを確認するには、DBA_OBJECTSデータ・ディクショナリ・ビューのSHARING列を問い合せます。
関連項目:
DBMS_PDB.SET_METADATA_LINKEDプロシージャの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください
親トピック: アプリケーション共通オブジェクトの共有
データリンク・アプリケーション共通オブジェクト
データ・リンクにより、共通オブジェクトの参照と権限を管理します。
データ・リンク(旧称オブジェクト・リンク)は、同じアプリケーション・コンテナに属するアプリケーション・プラガブル・データベース(PDB)からアプリケーション・ルートのオブジェクトに対する参照および権限付与を可能にします。
アプリケーション共通オブジェクトを所有するアプリケーション共通ユーザーがそのオブジェクトへのアクセス権をPDBのユーザーに付与する場合、アプリケーション共通ユーザーはその共通オブジェクトを指すデータ・リンクへの権限を付与することで、これを行うことができます。たとえば、オブジェクト(表、ビュー、クラスタ、順序またはPL/SQLパッケージなど)のデータ・リンクを作成して、この操作を参照するオブジェクトに対する操作(問合せ、DML、EXECUTE文など)が、操作が実行されるコンテナに関係なく、同じオブジェクトに影響することを確認できます。
データ・リンクは、アプリケーション・ルートから構成する必要があります。DBMS_PDB.SET_DATA_LINKED PL/SQLプロシージャを使用すると、データ・リンクを変更できます。既存のオブジェクトをデータ・リンクに変換する場合にのみ、このプロシージャを使用する必要があります。
次の例は、DBMS_PDB.SET_DATA_LINKEDプロシージャを使用して、hr_mgrスキーマのemp_ratings表をデータリンク・アプリケーション共通オブジェクトに変更する方法を示しています。
例4-8 オブジェクトをデータリンク・アプリケーション共通オブジェクトに変更する方法
BEGIN DBMS_PDB.SET_DATA_LINKED ( SCHEMA_NAME => 'hr_mgr', OBJECT_NAME => 'emp_ratings', NAMESPACE => 1); END; /
いずれの共通ユーザーもデータ・リンクを所有できます。
オブジェクトにデータ・リンクがあるかどうかを確認するには、DBA_OBJECTSデータ・ディクショナリ・ビューのSHARING列を問い合せます。このビューのNAMESPACE列は、ネームスペースの数値を示します。
関連項目:
DBMS_PDB.SET_DATA_LINKEDプロシージャの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください
親トピック: アプリケーション共通オブジェクトの共有
拡張データリンク・アプリケーション共通オブジェクト
拡張データ・リンクで、アプリケーションのプラガブル・データベース(PDB)とアプリケーション・ルートからのデータを組み合せることができます。
拡張データ・リンクは、PDB内の表で見つかったデータと、アプリケーション・ルートの対応する表からのデータを組み合せることができるデータ・リンクです。
拡張データ・リンクは、メタデータ・リンクとデータ・リンクのハイブリッドと考えることができます。アプリケーションPDB内の拡張データリンク・オブジェクトは、アプリケーション・ルート内の拡張データ・リンク・オブジェクトからメタデータを継承します。オブジェクトのデータはアプリケーション・ルートに格納され、オプションで各アプリケーションPDBに格納されます。拡張データ・リンクは、表およびビューに対してのみ作成できます。拡張データ・リンク・オブジェクトのDBA_OBJECTSデータ・ディクショナリ・ビューを問い合せると、このビューは、アプリケーションPDBとアプリケーション・ルートの両方から拡張データ・リンク関連の行を戻します。
拡張データ・リンクは、アプリケーション・ルートから構成する必要があります。DBMS_PDB.SET_EXT_DATA_LINKED PL/SQLプロシージャを使用すると、データベース・オブジェクトを拡張データ・リンクに変更できます。
次の例は、DBMS_PDB.SET_EXT_DATA_LINKEDプロシージャを使用して、hr_mgrスキーマのemp_salariesデータ・ディクショナリ・ビューを拡張データリンク・アプリケーション共通オブジェクトに変更する方法を示しています。
例4-9 オブジェクトを拡張データリンク・アプリケーション共通オブジェクトに変更する方法
BEGIN DBMS_PDB.SET_EXT_DATA_LINKED ( SCHEMA_NAME => 'hr_mgr', OBJECT_NAME => 'emp_salaries', NAMESPACE => 1); END; /
いずれの共通ユーザーも拡張データ・リンクを所有できます。
オブジェクトに拡張データ・リンクがあるかどうかを確認するには、DBA_OBJECTSデータ・ディクショナリ・ビューのSHARING列を問い合せます。
関連項目:
DBMS_PDB.SET_EXT_DATA_LINKEDプロシージャの詳細は、Oracle Database PL/SQLパッケージおよびタイプ・リファレンスを参照してください
親トピック: アプリケーション共通オブジェクトの共有
表権限
表に対するオブジェクト権限は、DMLまたはDDLレベルの操作に対する表セキュリティを実現します。
- 表に対する権限がデータ操作言語操作に与える影響
表およびビューでDELETE、INSERT、SELECTおよびUPDATEの各DML操作を使用する権限を付与できます。 - 表に対する権限がデータ定義言語操作に与える影響
ALTER、INDEXおよびREFERENCESの各権限は、表に対するDDL操作の実行を許可します。
親トピック: 権限とロール認可の構成
表に対する権限がデータ操作言語操作に与える影響
表およびビューでDELETE、INSERT、SELECTおよびUPDATEの各DML操作を使用する権限を付与できます。
これらの権限は、表のデータの問合せや操作が必要なユーザーとロールに対してのみ付与してください。
表に対するINSERT権限とUPDATE権限は、表の特定の列に制限できます。選択的なINSERT権限を付与されたユーザーは、選択した列に値を持つ行を挿入できます。他のすべての列には、NULLまたはその列のデフォルト値が挿入されます。選択的なUPDATE権限によって、ユーザーは行の特定の列に限ってその値を更新できます。機密データに対するユーザー・アクセスを制限するには、INSERT権限とUPDATE権限を選択的に使用します。
たとえば、データ入力ユーザーにemployees表のsalary列を変更させないようにするには、そのsalary列を除外した選択的なINSERT権限またはUPDATE権限を付与できます。また、salary列を除外したビューによって、同じ制限をさらに高いセキュリティ・レベルで実現できます。
関連項目:
DML操作の詳細は、『Oracle Database SQL言語リファレンス』を参照してください。
親トピック: 表権限
表に対する権限がデータ定義言語操作に与える影響
ALTER、INDEXおよびREFERENCESの各権限は、表に対するDDL操作の実行を許可します。
これらの権限によって、他のユーザーは表への依存性を変更または作成できるため、権限の付与は控えめに行う必要があります。表に対してDDL操作を実行するユーザーには、さらに他のシステム権限やオブジェクト権限が必要な場合があります。たとえば、表にトリガーを作成するには、その表に対するALTER TABLEオブジェクト権限とCREATE TRIGGERシステム権限の両方が必要です。
INSERT権限やUPDATE権限と同様に、REFERENCES権限は、表の特定の列を対象として付与できます。REFERENCES権限を付与されたユーザーは、付与の対象となった表を、自分の表の中に作成する外部キーの親キーとして使用できます。外部キーの存在によって、親キーに対して実行できるデータ操作と表の変更が制限されるため、このアクションは特殊な権限によって制御されます。列固有のREFERENCES権限によって、権限受領者が使用できるのは、指定された列(この列には、当然、親表の主キーまたは一意キーが最低1つ含まれている)に制限されます。
関連項目:
主キー、一意キーおよび整合性制約によるデータ整合性の仕組みの詳細は、Oracle Database概要を参照してください。親トピック: 表権限
ビューに対する権限
DMLオブジェクト権限は、表の場合と同様にビューに対しても適用できます。
- ビューの作成に必要な権限
ビューを作成するには、特定の権限が必要です。 - ビューの使用による表セキュリティの強化
データベース・ビューでは、ユーザーが参照できるデータを制限することによって表セキュリティを強化できます。
親トピック: 権限とロール認可の構成
ビューの作成に必要な権限
ビューを作成するには、特定の権限が必要です。
ビューに対するオブジェクト権限は、ビューの導出元の実表に影響を与える様々なDML操作を許可します。
ビューを作成する権限は次のとおりです。
-
次のどちらかのシステム権限が、明示的に、またはロールを介して付与されている必要があります。
-
CREATEVIEWシステム権限(自分のスキーマ内にビューを作成するため) -
CREATEANYVIEWシステム権限(別のユーザーのスキーマ内にビューを作成するため)
-
-
次のいずれかの権限が明示的に付与されている必要があります。
-
ビューの基礎となるすべてのベース・オブジェクトに対する
SELECT、INSERT、UPDATEまたはDELETEオブジェクト権限 -
SELECTANYTABLE、INSERTANYTABLE、UPDATEANYTABLEまたはDELETEANYTABLEシステム権限
-
-
さらに、自分のビューへのアクセス権を他のユーザーに付与するためには、ベース・オブジェクトに対する
GRANTOPTION句付きのオブジェクト権限、またはADMINOPTION句付きの適切なシステム権限を持っている必要があります。これらの権限を持っていない場合は、自分のビューに対するアクセス権を他のユーザーに付与できません。試行すると、ORA-01720「エラーが発生します。object_nameに対するGRANTオプションは存在しません。」object_nameはビューの基礎となるオブジェクトを参照しており、ユーザーにはこのオブジェクトに対する十分な権限がありません。
親トピック: ビューに対する権限
ビューの使用による表セキュリティの強化
データベース・ビューでは、ユーザーが参照できるデータを制限することによって表セキュリティを強化できます。
ユーザーがビューを使用するには、ビュー自体に対する適切な権限のみが必要であり、ビューの基礎となるオブジェクトに対する権限は不要です。ただし、ビューの基礎となるオブジェクトに対するアクセス権限が削除されると、ユーザーはアクセスできなくなります。
このように動作するのは、ユーザーがビューを問い合せるときに使用されるセキュリティ・ドメインが、そのビューの定義者のセキュリティ・ドメインであるためです。基礎となるオブジェクトに対する権限がビューの定義者によって取り消されると、そのビューは無効になり、いかなるユーザーも使用できなくなります。したがって、ビューに対するアクセス権が付与されているユーザーでも、ビューの基礎となるオブジェクトに対する定義者権限が取り消された場合は、そのビューを使用できません。
たとえば、ユーザーAがビューを作成するとします。ユーザーAは、ビューの基礎となるオブジェクトに対する定義者権限を持っています。この場合、ユーザーAがそのビューに対するSELECT権限をユーザーBに付与すると、ユーザーBがそのビューの問合せを実行できるようになります。ただし、ユーザーAがそのビューの基礎となるオブジェクトにアクセスできなくなった場合は、ユーザーBも同様にアクセスできなくなります。
ビューの場合は、次のように、表に対してさらに2つのセキュリティ・レベル(列レベルと値ベースのセキュリティ)が追加されます。
-
ビューは、実表の中から選択した列へのアクセスを提供できます。たとえば、
employees表の中からemployee_id列、last_name列およびmanager_id列のみを表示するようにビューを定義できます。CREATE VIEW employees_manager AS SELECT last_name, employee_id, manager_id FROM employees; -
ビューでは、表の情報に対して、値ベースのセキュリティを実現できます。ビュー定義で
WHERE句を使用すると、実表の中から選択した行のみが表示されます。次の2つの例を考えてみます。CREATE VIEW lowsal AS SELECT * FROM employees WHERE salary < 10000;lowsalビューでは、employees表のうち給与値が10000未満のすべての行にアクセスできます。lowsalビューでは、employees表のすべての列にアクセスできることに注目してください。CREATE VIEW own_salary AS SELECT last_name, salary FROM employees WHERE last_name = USER;own_salaryビューでは、このビューの現行ユーザーと一致するlast_nameの行のみにアクセスできます。own_salaryビューはuser疑似列を使用しており、この列の値は常に現行ユーザーを指します。このビューは、列レベルのセキュリティと値ベースのセキュリティの両方を兼ね備えています。
親トピック: ビューに対する権限
プロシージャ権限
EXECUTE権限は、スタンドアロンまたはパッケージ内でのプロシージャまたは関数の実行をユーザーに許可します。
- プロシージャ権限に対するEXECUTE権限の使用
EXECUTE権限は、注意して処理する必要がある非常に強力な権限です。 - プロシージャの実行とセキュリティ・ドメイン
プロシージャに対するEXECUTEオブジェクト権限を使用して、そのプロシージャを実行したり、それを参照するプログラム・ユニットをコンパイルできます。 - プロシージャの作成または置換に必要なシステム権限
自分のスキーマ内または別のユーザーのスキーマ内でプロシージャを作成または置換するには、特定の権限が必要です。 - プロシージャのコンパイルに必要なシステム権限
スタンドアロン・プロシージャとパッケージの一部であるプロシージャの両方をコンパイルするには、特定の権限が必要です。 - プロシージャに対する権限がパッケージおよびパッケージ・オブジェクトに与える影響
強力な権限であるEXECUTE権限は、ユーザーがパッケージ内のPUBLICプロシージャやファンクションを実行することを可能にします。
親トピック: 権限とロール認可の構成
プロシージャ権限に対するEXECUTE権限の使用
EXECUTE権限は、注意して処理する必要がある非常に強力な権限です。
スタンドアロン・プロシージャ、ファクションおよびパッケージを含め、プロシージャに対するオブジェクト権限は、EXECUTE権限のみです。
この権限は、プロシージャの実行、または必要なプロシージャをコールする他のプロシージャのコンパイルが必要なユーザーにのみ付与してください。ユーザーに付与された権限を確認するには、DBA_SYS_PRIVSデータ・ディクショナリ・ビューに問い合せます。
親トピック: プロシージャ権限
プロシージャの実行とセキュリティ・ドメイン
プロシージャに対するEXECUTEオブジェクト権限を使用して、そのプロシージャを実行したり、それを参照するプログラム・ユニットをコンパイルできます。
PL/SQLユニットのコール時には、Oracle Databaseによって実行時権限チェックが実行されます。EXECUTE ANY PROCEDUREシステム権限があるユーザーは、データベース内の任意のプロシージャを実行できます。プロシージャの実行権限は、ロールを介してユーザーに付与できます。
関連項目:
-
Oracle Databaseの実行時権限チェックの詳細は、『Oracle Database PL/SQLパッケージおよびタイプ・リファレンス』を参照してください。
親トピック: プロシージャ権限
プロシージャの作成または置換に必要なシステム権限
自分のスキーマ内または別のユーザーのスキーマ内でプロシージャを作成または置換するには、特定の権限が必要です。
自分のスキーマ内でプロシージャを作成または置換するには、CREATE PROCEDUREシステム権限が必要です。別のユーザーのスキーマ内でプロシージャを作成または置換するには、CREATE ANY PROCEDUREシステム権限が必要です。
プロシージャを所有するユーザーには、プロシージャ本体で参照されるスキーマ・オブジェクトに対する権限も必要です。プロシージャを作成するには、そのプロシージャによって参照されるすべてのオブジェクトに対する必要な権限(システム権限やオブジェクト権限)が明示的に付与されている必要があります。これらの必要な権限は、ロールを介して取得することはできません。これには、作成中のプロシージャ内でコールするプロシージャに対するEXECUTE権限も含まれます。
ノート:
トリガーの場合、参照オブジェクトに対する権限をトリガーの所有者に直接付与する必要があります。権限が明示的に、またはロールを介して付与されていても、無名PL/SQLブロックでは任意の権限を使用できます。
親トピック: プロシージャ権限
プロシージャのコンパイルに必要なシステム権限
スタンドアロン・プロシージャとパッケージの一部であるプロシージャの両方をコンパイルするには、特定の権限が必要です。
スタンドアロン・プロシージャをコンパイルするには、COMPILE句を使用してALTER PROCEDURE文を実行する必要があります。パッケージの一部であるプロシージャをコンパイルするには、ALTER PACKAGE文を実行する必要があります。
次の例は、スタンドアロン・プロシージャをコンパイルする方法を示しています。
ALTER PROCEDURE psmith.remove_emp COMPILE;
スタンドアロン・プロシージャまたはパッケージ・プロシージャが別のユーザーのスキーマ内にある場合、プロシージャを再コンパイルするにはALTER ANY PROCEDURE権限が必要です。自分のスキーマ内にあるプロシージャは、権限なしで再コンパイルできます。
親トピック: プロシージャ権限
プロシージャに対する権限がパッケージおよびパッケージ・オブジェクトに与える影響
強力な権限であるEXECUTE権限は、ユーザーがパッケージ内のPUBLICプロシージャやファンクションを実行することを可能にします。
- プロシージャに対する権限がパッケージおよびパッケージ・オブジェクトに与える影響について
パッケージに対するEXECUTEオブジェクト権限は、そのパッケージ内のすべてのプロシージャまたはファンクションに適用されます。 - 例: 1つのパッケージ内で使用されるプロシージャ権限
CREATE PACKAGE BODY文を使用してプロシージャを含むパッケージ本体を作成し、1つのパッケージ内で使用されるプロシージャ権限を管理できます。 - 例: プロシージャ権限およびパッケージ・オブジェクト
CREATE PACKAGE BODY文でプロシージャ定義を含むパッケージ本体を作成し、プロシージャ権限とパッケージ・オブジェクトを管理できます。
親トピック: プロシージャ権限
プロシージャに対する権限がパッケージおよびパッケージ・オブジェクトに与える影響について
パッケージに対するEXECUTEオブジェクト権限は、そのパッケージ内のすべてのプロシージャまたはファンクションに適用されます。
パッケージに対するEXECUTEオブジェクト権限を保持するユーザーは、そのパッケージ内の任意のパブリック・プロシージャまたはファンクションを実行し、任意のパブリック・パッケージ変数の値へのアクセスや変更を実行できます。
パッケージの各構成メンバーに、特定のEXECUTE権限を付与することはできません。したがって、データベース・アプリケーションのプロシージャ、ファンクションおよびパッケージを開発する場合は、セキュリティの確立に関して2つの選択肢を考慮してください。これらの選択肢について、次の例で説明します。
例: 1つのパッケージ内で使用されるプロシージャ権限
CREATE PACKAGE BODY文を使用してプロシージャを含むパッケージ本体を作成し、1つのパッケージ内で使用されるプロシージャ権限を管理できます。
例4-10では、2つのパッケージの本体に4つのプロシージャを作成しています。
例4-10 1つのパッケージ内で使用されるプロシージャ権限
CREATE PACKAGE BODY hire_fire AS
PROCEDURE hire(...) IS
BEGIN
INSERT INTO employees . . .
END hire;
PROCEDURE fire(...) IS
BEGIN
DELETE FROM employees . . .
END fire;
END hire_fire;
CREATE PACKAGE BODY raise_bonus AS
PROCEDURE give_raise(...) IS
BEGIN
UPDATE employees SET salary = . . .
END give_raise;
PROCEDURE give_bonus(...) IS
BEGIN
UPDATE employees SET bonus = . . .
END give_bonus;
END raise_bonus;
次のGRANT EXECUTE文を発行すると、big_bossesロールとlittle_bossesロールが適切なプロシージャを実行できるようになります。
GRANT EXECUTE ON hire_fire TO big_bosses; GRANT EXECUTE ON raise_bonus TO little_bosses;
例: プロシージャ権限およびパッケージ・オブジェクト
CREATE PACKAGE BODY文でプロシージャ定義を含むパッケージ本体を作成し、プロシージャ権限とパッケージ・オブジェクトを管理できます。
例4-11は、単一のパッケージ本体にある4つのプロシージャ定義を示しています。2つの追加スタンドアロン・プロシージャと1つのパッケージが特別に作成され、メイン・パッケージ内に定義されているプロシージャへのアクセスを提供します。
例4-11: プロシージャ権限およびパッケージ・オブジェクト
CREATE PACKAGE BODY employee_changes AS
PROCEDURE change_salary(...) IS BEGIN ... END;
PROCEDURE change_bonus(...) IS BEGIN ... END;
PROCEDURE insert_employee(...) IS BEGIN ... END;
PROCEDURE delete_employee(...) IS BEGIN ... END;
END employee_changes;
CREATE PROCEDURE hire
BEGIN
employee_changes.insert_employee(...)
END hire;
CREATE PROCEDURE fire
BEGIN
employee_changes.delete_employee(...)
END fire;
PACKAGE raise_bonus IS
PROCEDURE give_raise(...) AS
BEGIN
employee_changes.change_salary(...)
END give_raise;
PROCEDURE give_bonus(...)
BEGIN
employee_changes.change_bonus(...)
END give_bonus;
この方法を使用すると、実際に作業を実行するプロシージャ(employee_changesパッケージ内のプロシージャ)が1つのパッケージ内に定義され、宣言されたグローバル変数やカーソルなどを共有できます。トップ・レベルのプロシージャであるhireとfire、および追加のパッケージraise_bonusを宣言することによって、選択的なEXECUTE権限をメイン・パッケージ内のプロシージャに対して付与できます。
GRANT EXECUTE ON hire, fire TO big_bosses; GRANT EXECUTE ON raise_bonus TO little_bosses;
EXECUTE権限をパッケージに対して付与することで、すべてのパッケージ・オブジェクトへの均一なアクセスが提供されることに注意してください。
タイプ権限
型、メソッドおよびオブジェクトについて、システム権限とオブジェクト権限を制御できます。
- 名前付きの型に対するシステム権限
名前付きの型に対するシステム権限を使用すると、ユーザーは自分のスキーマ内での名前付きの型の作成などのアクションを実行できます。 - 名前付きの型のオブジェクト権限
名前付きの型に適用されるオブジェクト権限は、EXECUTEのみです。 - 名前付きの型のメソッド実行モデル
名前付きの型のメソッド実行は、他のストアドPL/SQLプロシージャと同じです。 - 型の作成と型を使用した表の作成に必要な権限
型を作成するには、適切な権限が必要です。 - 例: 型の作成と型を使用した表の作成に必要な権限
型に対するEXECUTE権限を他のユーザーに付与するには、GRANT OPTION付きのEXECUTE権限が必要です。 - 型アクセスとオブジェクト・アクセスの権限
DML文に対する列レベルと表レベルの既存の権限は、列オブジェクトと行オブジェクトの両方に適用されます。 - 型の依存性
プロシージャや表などのストアド・オブジェクトと同様に、他のオブジェクトから参照される型を依存性があると呼びます。
親トピック: 権限とロール認可の構成
名前付きの型に対するシステム権限
名前付きの型に対するシステム権限を使用すると、ユーザーは自分のスキーマ内での名前付きの型の作成などのアクションを実行できます。
表4-7に、名前付きの型(オブジェクト型、VARRAYおよびネストした表)に対するシステム権限のリストを示します。
表4-7 名前付きの型に対するシステム権限
| 権限 | 許可される操作 |
|---|---|
|
|
名前付きの型を自分のスキーマ内に作成できます。 |
|
|
名前付きの型を任意のスキーマ内に作成できます。 |
|
|
任意のスキーマにある名前付きの型を変更できます。 |
|
|
任意のスキーマにある名前付きの型を削除できます。 |
|
|
任意のスキーマにある名前付きの型を使用および参照できます。 |
RESOURCEロールには、CREATE TYPEシステム権限が含まれています。DBAロールには、これらの権限すべてが含まれています。
親トピック: タイプ権限
名前付きの型のオブジェクト権限
名前付きの型に適用されるオブジェクト権限は、EXECUTEのみです。
名前付きの型に対するEXECUTE権限があるユーザーは、その型を使用して次の操作を実行できます。
-
表の定義
-
リレーショナル表への列の定義
-
名前付きの型の変数またはパラメータの宣言
EXECUTE権限によって、ユーザーは、型コンストラクタも含めて、その型のメソッドを起動できます。これは、ストアドPL/SQLプロシージャに対するEXECUTE権限と同じです。
親トピック: タイプ権限
名前付きの型のメソッド実行モデル
名前付きの型のメソッド実行は、他のストアドPL/SQLプロシージャと同じです。
ユーザーには、EXECUTE権限など、名前付きの型を使用するための適切な権限が付与されている必要があります。すべての権限付与と同様に、これらの権限は信頼できるユーザーのみに付与してください。ユーザーに付与された権限を確認するには、DBA_SYS_PRIVSデータ・ディクショナリ・ビューに問い合せます。
型の作成と型を使用した表の作成に必要な権限
型を作成するには、適切な権限が必要です。
これらの権限は次のとおりです。
-
自分のスキーマにタイプを作成するには
CREATETYPEシステム権限が必要になり、他のユーザーのスキーマにタイプを作成するにはCREATEANYTYPEシステム権限が必要になります。これらの権限は、明示的にまたはロールを介して取得できます。 -
型の所有者には、その型の定義内で参照されている他のすべての型にアクセスするための
EXECUTEオブジェクト権限が明示的に付与されているか、EXECUTEANYTYPEシステム権限が付与されている必要があります。所有者は、ロールを介して必要な権限を取得することはできません。 -
型の所有者が型へのアクセス権を他のユーザーに付与する場合、その所有者には、参照される型に対する
EXECUTE権限(GRANTOPTION付きで指定)またはEXECUTEANYTYPEシステム権限(ADMINOPTION付きで指定)が必要です。どちらの権限もない型の所有者は、権限不足のため、型へのアクセス権を他のユーザーに付与できません。
型を使用して表を作成するには、表の作成要件と次の要件を満たす必要があります。
-
表の所有者には、その表で参照されているすべての型にアクセスするための
EXECUTEオブジェクト権限が直接付与されているか、EXECUTEANYTYPEシステム権限が付与されている必要があります。これらの権限がロールを介して付与されている場合、所有者は必要な権限を行使できません。 -
表の所有者が表へのアクセス権を他のユーザーに付与する場合、その所有者には、参照される型に対する
EXECUTE権限(GRANTOPTION付きで指定)またはEXECUTEANYTYPEシステム権限(ADMINOPTION付きで指定)が必要です。どちらの権限もない表の所有者は、権限不足のため、表へのアクセス権を付与できません。
例: 型の作成と型を使用した表の作成に必要な権限
型に対するEXECUTE権限を他のユーザーに付与するには、GRANT OPTION付きのEXECUTE権限が必要です。
CONNECTロールとRESOURCEロールを持つ次の3名のユーザーが存在するとします。
-
user1 -
user2 -
user3
次のDDLは、user1のスキーマで実行されます。
CREATE TYPE type1 AS OBJECT ( attr1 NUMBER); CREATE TYPE type2 AS OBJECT ( attr2 NUMBER); GRANT EXECUTE ON type1 TO user2; GRANT EXECUTE ON type2 TO user2 WITH GRANT OPTION;
次のDDLは、user2のスキーマで実行されます。
CREATE TABLE tab1 OF user1.type1; CREATE TYPE type3 AS OBJECT ( attr3 user1.type2); CREATE TABLE tab2 ( col1 user1.type2);
次の文は、正常に実行されます。user2には、user1.type2に対するGRANT OPTION付きのEXECUTE権限があるためです。
GRANT EXECUTE ON type3 TO user3; GRANT SELECT ON tab2 TO user3;
ただし、次の権限付与は正しく実行されません。user2には、user1.type1に対するGRANT OPTION付きのEXECUTE権限がないためです。
GRANT SELECT ON tab1 TO user3;
次の文は、user3によって正常に実行されます。
CREATE TYPE type4 AS OBJECT ( attr4 user2.type3); CREATE TABLE tab3 OF type4;
ノート:
CONNECTロールが現在保持している権限は、CREATE SESSIONおよびSET CONTAINER権限のみです。
親トピック: タイプ権限
型アクセスとオブジェクト・アクセスの権限
DML文に対する列レベルと表レベルの既存の権限は、列オブジェクトと行オブジェクトの両方に適用されます。
表4-8に、オブジェクト表に対する権限をリストします。
表4-8 オブジェクト表に対する権限
| 権限 | 許可される操作 |
|---|---|
|
|
オブジェクトとその属性に表からアクセスできます。 |
|
|
表の行を構成するオブジェクトの属性を変更できます。 |
|
|
表に新規オブジェクトを作成できます。 |
|
|
行を削除できます |
同様に、列オブジェクトには表に対する権限と列に対する権限が適用されます。インスタンスの取得のみでは、型情報は明らかになりません。ただし、クライアントは、型インスタンスのイメージを解釈する際に名前付きの型の情報にアクセスする必要があります。クライアントが型情報を要求すると、その型に対するEXECUTE権限がチェックされます。
次のスキーマを考えてみます。
CREATE TYPE emp_type (
eno NUMBER, ename CHAR(31), eaddr addr_t);
CREATE TABLE emp OF emp_t;
さらに、次の2つの問合せについて考えます。
SELECT VALUE(emp) FROM emp; SELECT eno, ename FROM emp;
どちらの問合せの場合も、Oracle Databaseは、emp表に対するユーザーのSELECT権限をチェックします。最初の問合せの場合、ユーザーは、emp_typeの型情報を取得してデータを解釈する必要があります。問合せによってemp_type型がアクセスされると、ユーザーのEXECUTE権限がチェックされます。
ただし、2番目の問合せでは、名前付きの型が含まれていないため、型の権限はチェックされません。
さらに、user3は、前の項のスキーマを使用して次の問合せを実行できます。
SELECT tab1.col1.attr2 FROM user2.tab1 tab1; SELECT attr4.attr3.attr2 FROM tab3;
どちらのSELECT文でも、user3には基礎となる型に対する明示的な権限がありませんが、文には成功することに注意してください。これは、型の所有者と表の所有者に、GRANT OPTIONを備えた必要な権限があるためです。
Oracle Databaseは、次のイベントに対する権限をチェックし、アクションに対する権限がクライアントにない場合はエラーを戻します。
-
オブジェクトの
REF値を使用してオブジェクト・キャッシュ内でオブジェクトを確保すると、Oracle Databaseは、そのオブジェクトが含まれているオブジェクト表に対するSELECT権限をチェックします。 -
既存のオブジェクトを修正したり、オブジェクト・キャッシュからオブジェクトをフラッシュしたりすると、Oracle Databaseは目的のオブジェクト表に対する
UPDATE権限をチェックします。 -
新しいオブジェクトをフラッシュすると、Oracle Databaseは目的のオブジェクト表に対する
INSERT権限をチェックします。 -
オブジェクトを削除すると、Oracle Databaseは目的の表に対する
DELETE権限をチェックします。 -
名前付きの型のオブジェクトを確保すると、そのオブジェクトに対する
EXECUTE権限がチェックされます。
クライアントの第三世代言語アプリケーションのオブジェクトの属性を変更すると、Oracle Databaseでオブジェクト全体の更新が行われます。そのため、ユーザーにはオブジェクト表に対するUPDATE権限が必要になります。オブジェクト表の特定列に対してのみUPDATE権限を持つことは、アプリケーションがこれらの列に対応した属性のみ変更する場合でも、十分とはいえません。そのため、Oracle Databaseではオブジェクト表の列レベルの権限をサポートしていません。
親トピック: タイプ権限
型の依存性
プロシージャや表などのストアド・オブジェクトと同様に、他のオブジェクトから参照される型を依存性があると呼びます。
表が依存する型については、特殊な問題点がいくつかあります。表には、アクセス用の型定義に依存するデータが含まれているため、その型を変更すると、格納されているすべてのデータにアクセスできなくなります。変更によってこのような結果になるのは、型を使用するために必要な権限が取り消された場合や、型または依存型が削除された場合です。いずれかのアクションが発生すると、表は無効になり、アクセスできなくなります。
必要な権限が再び付与されると、権限がないために無効になった表は自動的に有効になり、アクセスできるようになります。依存型が削除されたことで無効になった表は、アクセス不能のままで、実行できるアクションは表の削除のみです。
型に対する権限の取消しや型の削除は重大な影響があるため、デフォルトでは、SQL文のREVOKEとDROP TYPEは限定されたセマンティクスで実装されます。つまり、どちらの文でも、名前付きの型が表または型に依存している場合は、エラーが戻されて文は取り消されます。ただし、どちらの文も、FORCE句を使用すると常に正常終了します。依存する表がある場合、その表は無効になります。
ユーザーへの権限とロールの付与
GRANT文は、プロシージャの実行など、特定のアクションを実行する権限をユーザーに付与します。
- ユーザーおよびロールへのシステム権限とロールの付与
システム権限とロールをユーザーやロールに付与する前に、これらのタイプの付与に対して権限がどのように機能するかについて注意してください。 - ユーザーおよびロールへのオブジェクト権限の付与
ユーザーおよびロールにオブジェクト権限を付与できるほか、権限受領者が他のユーザーにその権限を付与することを許可できます。
親トピック: 権限とロール認可の構成
ユーザーおよびロールへのシステム権限とロールの付与
システム権限とロールをユーザーやロールに付与する前に、これらのタイプの付与に対して権限がどのように機能するかについて注意してください。
- ユーザーおよびロールへのシステム権限とロールの付与のための権限
システム権限とロールを他のユーザーやロールに付与するには、GRANTSQL文を使用します。 - 例: ユーザーへのシステム権限とロールの付与
システム権限とロールをユーザーに付与するには、GRANT文を使用できます。 - 例: ディレクトリ・オブジェクトに対するEXECUTE権限の付与
ディレクトリ・オブジェクトに対するEXECUTE権限を付与するには、GRANT文を使用できます。 - 権限受領ユーザーによる権限付与を可能にするADMINオプションの使用
WITH ADMIN OPTION句を使用して、権限付与の能力を拡張できます。 - GRANT文を使用した新規ユーザーの作成
1つのGRANTSQL文で、新規ユーザーを作成してこのユーザーに権限を付与できます。
親トピック: ユーザーへの権限とロールの付与
ユーザーおよびロールへのシステム権限とロールの付与のための権限
システム権限とロールを他のユーザーやロールに付与するには、GRANT SQL文を使用します。
次の権限が必要です。
-
システム権限を付与するには、ユーザーに
ADMINオプション付きのシステム権限またはGRANT ANY PRIVILEGEシステム権限が付与されている必要があります。 -
ロールを付与するには、ユーザーに
ADMINオプション付きのロールまたはGRANT ANY ROLEシステム権限が付与されている必要があります。
ノート:
オブジェクト権限は、同じGRANT文でシステム権限やロールと同時に付与することはできません。
親トピック: ユーザーおよびロールへのシステム権限とロールの付与
例: ユーザーへのシステム権限とロールの付与
システム権限とロールをユーザーに付与するには、GRANT文を使用できます。
例4-12では、システム権限CREATE SESSIONとaccts_payロールをユーザーjwardに付与しています。
例4-12 ユーザーへのシステム権限とロールの付与
GRANT CREATE SESSION, accts_pay TO jward;
親トピック: ユーザーおよびロールへのシステム権限とロールの付与
例: ディレクトリ・オブジェクトに対するEXECUTE権限の付与
ディレクトリ・オブジェクトに対するEXECUTE権限を付与するには、GRANT文を使用できます。
例4-12 では、exec_dirディレクトリ・オブジェクトに対するEXECUTE権限をユーザーjwardに付与しています。
例4-13 ディレクトリ・オブジェクトに対するEXECUTE権限の付与
GRANT EXECUTE ON DIRECTORY exec_dir TO jward;
親トピック: ユーザーおよびロールへのシステム権限とロールの付与
権限受領ユーザーによる権限付与を可能にするADMINオプションの使用
WITH ADMIN OPTION句を使用して、権限付与の能力を拡張できます。
これらの機能は次のとおりです。
-
権限受領者は、データベース内の他のユーザーまたはロールに対して、システム権限またはロールの付与または取消しができます。ただし、自分自身からロールを取り消すことはできません。
-
権限受領者は、
ADMINオプション付きのシステム権限やロールを付与できます。 -
ロールの権限受領者は、そのロールを変更または削除できます。
例4-14では、new_dbaロールをWITH ADMIN OPTION句付きでユーザーmichaelに付与しています。
例4-14 ADMINオプションの付与
GRANT new_dba TO michael WITH ADMIN OPTION;
ユーザーmichaelは、new_dbaロール内の権限をすべて暗黙的に使用できることに加え、必要に応じてnew_dbaロールを付与、取消しおよび削除できます。このように、ADMINオプションは非常に強力な機能であるため、このオプションを付けてシステム権限やロールを付与する際は、十分に注意してください。通常、これらの権限はセキュリティ管理者向けに用意されており、システム内の他の管理者やユーザーに付与することはほとんどありません。ユーザーがロールを作成すると、そのロールは自動的にADMINオプション付きでその作成ユーザーに付与されることに注意してください。
親トピック: ユーザーおよびロールへのシステム権限とロールの付与
GRANT文を使用した新規ユーザーの作成
1つのGRANT SQL文で、新規ユーザーを作成してこのユーザーに権限を付与できます。
ほとんどの場合、ユーザーにCREATE SESSION権限を付与します。
-
GRANT文を使用して新規ユーザーを作成するには、権限およびIDENTIFIED BY句を含めます。
たとえば、新規ユーザーとしてpsmithを作成し、CREATE SESSIONシステム権限をpsmithに付与する方法は、次のとおりです。
GRANT CREATE SESSION TO psmith IDENTIFIED BY password;IDENTIFIED BY句を使用してパスワードを指定することで、ユーザー名がデータベースに存在しない場合も、指定したユーザー名とパスワードで新しいユーザーが作成されます。
関連トピック
親トピック: ユーザーおよびロールへのシステム権限とロールの付与
ユーザーおよびロールへのオブジェクト権限の付与
ユーザーおよびロールにオブジェクト権限を付与できるほか、権限受領者が他のユーザーにその権限を付与することを許可できます。
- ユーザーおよびロールへのオブジェクト権限の付与について
GRANT文を使用すると、ロールとユーザーにオブジェクト権限を付与できます。 - WITH GRANT OPTION句が機能するしくみ
GRANT文でWITH GRANT OPTION句を使用すると、権限受領者はオブジェクト権限を他のユーザーに付与できるようになります。 - オブジェクト所有者にかわるオブジェクト権限の付与
GRANT ANY OBJECT PRIVILEGEシステム権限を持つユーザーは、オブジェクト所有者のかわりに、すべてのオブジェクト権限の付与と取消しを実行できます。 - 列に対する権限の付与
表の個々の列に対してINSERT、UPDATEまたはREFERENCES権限を付与できます。 - 行レベルのアクセス制御
行レベルで、つまりオブジェクト内でアクセスを制御できますが、GRANT文で行うことはできません。
親トピック: ユーザーへの権限とロールの付与
ユーザーおよびロールへのオブジェクト権限の付与について
GRANT文を使用すると、ロールとユーザーにオブジェクト権限を付与できます。
オブジェクト権限を付与するには、次のいずれかの条件を満たしている必要があります。
-
指定するオブジェクトを所有している。
-
GRANT ANY OBJECT PRIVILEGEシステム権限を付与されている。この権限を使用すると、オブジェクト所有者のかわりに権限の付与と取消しを実行できます。 -
オブジェクト権限が付与されるときに、
WITH GRANT OPTION句が指定されている。ノート:
同じ
GRANT文で、オブジェクト権限とともにシステム権限とロールを付与することはできません。
次の例では、emp表のすべての列に対するREAD、INSERTおよびDELETEのオブジェクト権限をユーザーjfeeとtsmithに付与しています。
GRANT READ, INSERT, DELETE ON emp TO jfee, tsmith;
salaryビューのすべてのオブジェクト権限をユーザーjfeeに付与するには、次の例のようにALLキーワードを使用します。
GRANT ALL ON salary TO jfee;
ノート:
権限受領者は、最初の権限付与にGRANT OPTIONが含まれていないかぎり、オブジェクトへのアクセス権を再度付与することはできません。したがって、前述の例では、jfeeはGRANT文を使用してオブジェクト権限を他の誰かに付与することができません。
親トピック: ユーザーおよびロールへのオブジェクト権限の付与
WITH GRANT OPTION句が機能するしくみ
GRANT文でWITH GRANT OPTION句を使用すると、権限受領者はオブジェクト権限を他のユーザーに付与できるようになります。
スキーマ内にオブジェクトを格納しているユーザーには、関連するすべてのオブジェクト権限がWITH GRANT OPTION句付きで自動的に付与されます。この特別な権限によって、権限受領者の権限は次のように拡張されます。
-
権限受領者は、データベース内の任意のユーザーに
GRANT OPTIONの有無を問わずオブジェクト権限を付与でき、そしてデータベース内の任意のロールに付与できます。 -
次の2つの条件が成立する場合、権限受領者は表に対するビューを作成し、そのビューの対応する権限をデータベース内の任意のユーザーまたはロールに対して付与できます。
-
権限受領者が、表に対する
GRANT OPTION付きのオブジェクト権限を受領している。 -
権限受領者に、
CREATE VIEWまたはCREATE ANY VIEWシステム権限がある。
-
ノート:
オブジェクト権限をロールに付与する場合、WITH GRANT OPTION句は無効です。Oracle Databaseでは、ロールによるオブジェクト権限の伝播を禁止しているため、ロールの権限受領者は、ロールを介して受領したオブジェクト権限を他に伝播することはできません。
親トピック: ユーザーおよびロールへのオブジェクト権限の付与
オブジェクト所有者にかわるオブジェクト権限の付与
GRANT ANY OBJECT PRIVILEGEシステム権限を持つユーザーは、オブジェクト所有者のかわりに、すべてのオブジェクト権限の付与と取消しを実行できます。
この権限によって、データベース管理者やアプリケーション管理者は、スキーマに接続せずにスキーマ内のオブジェクトへのアクセス権を付与できます。この権限を持つスキーマ所有者のログイン資格証明はメンテナンスする必要がなく、構成時に必要な接続数が減少します。
このシステム権限はOracle Databaseに用意されているDBAロールに付属しているため、AS SYSDBAで接続するユーザー(ユーザーSYS)に(ADMIN option付きで)付与されます。他のシステム権限と同様に、GRANT ANY OBJECT PRIVILEGEシステム権限を付与できるのは、ADMIN option権限を持っているユーザーのみです。
オブジェクトに対するアクセス権の記録された権限付与者は、オブジェクト所有者とGRANT ANY OBJECT PRIVILEGEシステム権限を行使している個人のどちらかです。GRANT ANY OBJECT PRIVILEGEがある権限付与者にGRANT OPTION付きのオブジェクト権限がない場合、オブジェクト所有者が権限付与者として表示されます。権限付与者がGRANT OPTION付きのオブジェクト権限を持っている場合は、その権限付与者が付与者として記録されます。
ノート:
GRANT文によって生成された監査レコードには、常に権限付与を実際に実行したユーザーが示されます。
たとえば、次の使用例を考えてみます。ユーザーadamsにGRANT ANY OBJECT PRIVILEGEシステム権限があります。他の付与権限は所持していないとします。このユーザーが次の文を発行します。
GRANT SELECT ON HR.EMPLOYEES TO blake WITH GRANT OPTION;
DBA_TAB_PRIVSビューを調べると、hrが権限付与者として表示されていることがわかります。
SELECT GRANTEE, GRANTOR, PRIVILEGE, GRANTABLE FROM DBA_TAB_PRIVS WHERE TABLE_NAME = 'EMPLOYEES' and OWNER = 'HR'; GRANTEE GRANTOR PRIVILEGE GRANTABLE -------- ------- ----------- ---------- BLAKE HR SELECT YES
ここで、ユーザーblakeにもGRANT ANY OBJECT PRIVILEGEシステム権限があると想定します。このユーザーが次の文を発行します。
GRANT SELECT ON HR.EMPLOYEES TO clark;
この場合は、DBA_TAB_PRIVSビューを再び問い合せると、blakeが権限付与者として表示されます。
GRANTEE GRANTOR PRIVILEGE GRANTABLE -------- -------- --------- ---------- BLAKE HR SELECT YES CLARK BLAKE SELECT NO
これは、blakeがすでにHR.EMPLOYEESに対してGRANT OPTION付きのSELECT権限を持っているためです。
関連トピック
親トピック: ユーザーおよびロールへのオブジェクト権限の付与
列に対する権限の付与
表の個々の列に対してINSERT、UPDATEまたはREFERENCES権限を付与できます。
ノート:
列固有のINSERT権限を付与する前に、NOT NULL制約が定義されている列が表に含まれているかどうかを確認してください。挿入できる列を選んで権限を付与したときにNOT NULL列が抜けていると、ユーザーは表に行を挿入できません。このような状況を回避するには、各NOT NULL列が挿入可能であること、またはNULL以外のデフォルト値があることを確認してください。そうでない場合、権限受領者は表に行を挿入できず、エラーが発生します。
次の文は、accounts表のacct_no列に対するINSERT権限をpsmithに付与しています。
GRANT INSERT (acct_no) ON accounts TO psmith;
次の例では、emp表のenameおよびjob列に対するオブジェクト権限が、ユーザーjfeeおよびtsmithに付与されます。
GRANT INSERT(ename, job) ON emp TO jfee, tsmith;
親トピック: ユーザーおよびロールへのオブジェクト権限の付与
ユーザーからの権限とロールの取消し
システムまたはオブジェクトの権限を取り消す場合は、権限の取消しによる連鎖的な影響に注意してください。
- システム権限とロールの取消し
REVOKESQL文で、システム権限およびロールを取り消します。 - オブジェクト権限の取消し
複数のオブジェクト権限、オブジェクト所有者のかわりに付与したオブジェクト権限、列を選択するオブジェクト権限、およびREFERENCESオブジェクト権限を取り消すことができます。 - 権限の取消しによる連鎖的な影響
DDL操作に関連するオブジェクト権限の取消しでは連鎖的な影響はありませんが、オブジェクト権限の取消しに関する連鎖的な影響はあります。
親トピック: 権限とロール認可の構成
システム権限とロールの取消し
REVOKE SQL文で、システム権限およびロールを取り消します。
ADMINオプション付きでシステム権限またはロールを付与されているユーザーは、他のデータベース・ユーザーまたはロールから権限またはロールを取り消すことができます。取消しを行うユーザーは、権限やロールを最初に付与したユーザーでなくてもかまいません。GRANT ANY ROLEがあるユーザーは、任意のロールを取り消すことができます。
例4-15は、CREATE TABLEシステム権限とaccts_recロールをユーザーpsmithから取り消します。
例4-15 ユーザーからのシステム権限とロールの取消し
REVOKE CREATE TABLE, accts_rec FROM psmith;
システム権限またはロールのADMINオプションを選択的に取り消すことはできないことに注意してください。権限またはロールを取り消してから、同じ権限またはロールをADMINオプションを指定せずに再度付与する必要があります。
親トピック: ユーザーからの権限とロールの取消し
オブジェクト権限の取消し
複数のオブジェクト権限、オブジェクト所有者のかわりに付与したオブジェクト権限、列を選択するオブジェクト権限、およびREFERENCESオブジェクト権限を取り消すことができます。
- オブジェクト権限の取消しについて
オブジェクト権限を取り消す場合、ユーザーは一定の要件を満たしている必要があります。 - 複数のオブジェクト権限の取消し
REVOKE文で、1つのオブジェクトに対する複数の権限を取り消すことができます。 - オブジェクト所有者にかわるオブジェクト権限の取消し
GRANT ANY OBJECT PRIVILEGEシステム権限を使用して、オブジェクト所有者が権限付与者であるオブジェクト権限を取り消すことができます。 - 列を選択するオブジェクト権限の取消し
列固有操作に対するGRANTおよびREVOKE操作には異なる権限と制約があります。 - REFERENCESオブジェクト権限の取消し
REFERENCESオブジェクト権限を取り消すと、外部キー制約に影響を与えます。
親トピック: ユーザーからの権限とロールの取消し
オブジェクト権限の取消しについて
オブジェクト権限を取り消す場合、ユーザーは一定の要件を満たしている必要があります。
次のいずれかの条件を満たしている必要があります。
-
以前にユーザーまたはロールにオブジェクト権限を付与している。
-
オブジェクト所有者のかわりに権限を付与したり取り消すことができる
GRANT ANY OBJECT PRIVILEGEシステム権限を所持している。
取り消すことができるのは、権限付与者として自身で直接認可した権限のみです。GRANT OPTIONを付与した他のユーザーによる権限付与を取り消すことはできません。ただし、連鎖的な影響があります。権限付与者のオブジェクト権限を取り消すと、GRANT OPTIONを使用して伝播されたオブジェクト権限も取り消されます。
親トピック: オブジェクト権限の取消し
複数のオブジェクト権限の取消し
REVOKE文で、1つのオブジェクトに対する複数の権限を取り消すことができます。
最初の権限付与者が次の文を発行すると、ユーザーjfeeとpsmithからemp表のSELECT権限とINSERT権限が取り消されます。
REVOKE SELECT, INSERT ON emp FROM jfee, psmith;
次の文は、最初にhuman_resourceロールに付与したdept表に対するすべてのオブジェクト権限を取り消します。
REVOKE ALL ON dept FROM human_resources;
ノート:
オブジェクト権限のGRANT OPTIONを選択的に取り消すことはできません。オブジェクト権限を取り消してから、同じ権限をGRANT OPTIONを指定せずに再度付与する必要があります。ユーザーが自分自身からオブジェクト権限を取り消すことはできません。
親トピック: オブジェクト権限の取消し
オブジェクト所有者にかわるオブジェクト権限の取消し
GRANT ANY OBJECT PRIVILEGEシステム権限を使用して、オブジェクト所有者が権限付与者であるオブジェクト権限を取り消すことができます。
この操作を実行できるのは、オブジェクト所有者によって、または所有者のかわりにGRANT ANY OBJECT PRIVILEGEシステム権限を持つユーザーによって、オブジェクト権限が付与されている場合です。
オブジェクト権限が、オブジェクト所有者とREVOKE文を実行するユーザー(特定のオブジェクト権限とGRANT ANY OBJECT PRIVILEGEシステム権限の両方を持つユーザー)の両方によって付与されている場合は、REVOKE文を発行したユーザーによって付与されたオブジェクト権限のみが取り消されます。この使用例については、オブジェクト所有者にかわるオブジェクト権限の付与の例を使用して説明します。
ここでは、blakeがHR.EMPLOYEESに対するSELECT権限をclarkに付与しているとします。blakeはGRANT ANY OBJECT PRIVILEGEシステム権限を所有していますが、特定のオブジェクト権限も保有しているため、この付与はblakeに起因します。ここでは、ユーザーHRもHR.EMPLOYEESに対するSELECT権限をユーザーclarkに付与しているとします。DBA_TAB_PRIVSビューの問合せでは、HR.EMPLOYEES表について次の権限付与が有効であることが表示されています。
GRANTEE GRANTOR PRIVILEGE GRANTABLE -------- ------- ----------- ---------- BLAKE HR SELECT YES CLARK BLAKE SELECT NO CLARK HR SELECT NO
ユーザーblakeが次のREVOKE文を発行します。
REVOKE SELECT ON HR.EMPLOYEES FROM clark;
ユーザーblakeがユーザーclarkに付与したオブジェクト権限のみが削除されます。オブジェクト所有者HRによる権限付与はそのまま残ります。
GRANTEE GRANTOR PRIVILEGE GRANTABLE -------- ------- ----------- ---------- BLAKE HR SELECT YES CLARK HR SELECT NO
blakeが再度REVOKE文を発行すると、今度は(HRのかわりに)adamsがGRANT ANY OBEJCT PRIVILEGEシステム権限を使用して付与したオブジェクト権限が削除されます。
関連トピック
親トピック: オブジェクト権限の取消し
列を選択するオブジェクト権限の取消し
列固有操作に対するGRANTおよびREVOKE操作には異なる権限と制約があります。
表やビューの列を指定してINSERT、UPDATEおよびREFERENCES権限を付与することは可能ですが、同じようなREVOKE文を使用して、列固有の権限を選択的に取り消すことはできません。かわりに、権限付与者は表またはビューの全列に対するオブジェクト権限を取り消してから、残しておく列固有の権限を選択的に再度付与する必要があります。
たとえば、human_resourcesロールには、dept表のdeptno列およびdname列に対するUPDATE権限が付与されているとします。このUPDATE権限をdeptno列のみから取り消すには、次の2つの文を発行します。
REVOKE UPDATE ON dept FROM human_resources; GRANT UPDATE (dname) ON dept TO human_resources;
このREVOKE文によって、ロールhuman_resourcesからdept表の全列に対するUPDATE権限が取り消されます。次にGRANT文によって、human_resourcesロールに対して、dname列のUPDATE権限の付与がやりなおし、リストアまたは再発行されます。
親トピック: オブジェクト権限の取消し
REFERENCESオブジェクト権限の取消し
REFERENCESオブジェクト権限を取り消すと、外部キー制約に影響を与えます。
REFERENCESオブジェクト権限の権限受領者がその権限を使用して外部キー制約を作成し、その制約が現在も存在している場合、権限付与者がその権限を取り消すには、REVOKE文にCASCADE CONSTRAINTSオプションを指定します。
例:
REVOKE REFERENCES ON dept FROM jward CASCADE CONSTRAINTS;
CASCADE CONSTRAINTS句を指定すると、取り消されるREFERENCES権限を使用して現在も定義されている外部キー制約が削除されます。
親トピック: オブジェクト権限の取消し
権限の取消しによる連鎖的な影響
DDL操作に関連するオブジェクト権限の取消しではカスケード効果はありませんが、オブジェクト権限の取消しに関するカスケード効果はあります。
- システム権限の取消しによる連鎖的な影響
DDL操作に関連するシステム権限を取り消したときには連鎖的な影響は発生しません。 - オブジェクト権限の取消しによる連鎖的な影響
オブジェクト権限を取り消すと、連鎖的な影響が発生する場合があります。
親トピック: ユーザーからの権限とロールの取消し
システム権限の取消しによる連鎖的な影響
DDL操作に関連するシステム権限を取り消したときには連鎖的な影響は発生しません。
これは、権限がADMINオプションとともに付与されたかどうかとは関係ありません。
たとえば、次のような場合を考えてみます。
-
セキュリティ管理者が、
ADMIN optionを指定して、ユーザーjfeeにCREATE TABLEシステム権限を付与します。 -
ユーザー
jfeeが表を作成します。 -
ユーザー
jfeeが、ユーザーtsmithにCREATE TABLEシステム権限を付与します。 -
ユーザー
tsmithが表を作成します。 -
セキュリティ管理者が、ユーザー
jfeeからCREATE TABLEシステム権限を取り消します。 -
ユーザー
jfeeが作成した表はそのまま残ります。ユーザーtsmithの表とCREATE TABLEシステム権限はそのまま残ります。
連鎖的な影響は、DML操作に関連するシステム権限を取り消したときに発生する場合があります。ユーザーのSELECT ANY TABLE権限を取り消すと、そのユーザーのスキーマ内に存在し、この権限に依存しているすべてのプロシージャは、権限が再度認可されないかぎり、正常に実行できなくなります。
親トピック: 権限の取消しによる連鎖的な影響
オブジェクト権限の取消しによる連鎖的な影響
オブジェクト権限を取り消すと、連鎖的な影響が発生する場合があります。
次のことに注意してください。
-
DMLオブジェクト権限を取り消すと、そのDMLオブジェクト権限に依存するオブジェクト定義にまで影響が及ぶ可能性があります。たとえば、
testプロシージャの本体に、emp表のデータを問い合せるSQL文が記述されているとします。testプロシージャの所有者からemp表のSELECT権限を取り消すと、それ以降そのプロシージャを正常に実行できなくなります。 -
表に対するREFERENCES権限をユーザーから取り消すと、そのユーザーが定義した外部キー整合性制約の中で、取り消されたREFERENCES権限を必要とする制約が自動的に削除されます。たとえば、ユーザー
jwardにdept表のdeptno列に対するREFERENCES権限が付与されているとします。このユーザーが、emp表のdeptno列に、dept表のdeptno列を参照する外部キーを作成します。dept表のdeptno列に対するREFERENCES権限を取り消すと、同じ操作でemp表のdeptno列に対する外部キー制約も削除されます。 -
GRANT OPTIONを使用して伝播されたオブジェクト権限付与は、権限付与者のオブジェクト権限が取り消されると取り消されます。たとえば、
GRANT OPTION付きのemp表に対するSELECTオブジェクト権限を付与されているuser1が、user2に対してemp表に対するSELECT権限を付与したとします。その後、user1からSELECT権限を取り消します。このREVOKE文はuser2にも連鎖します。user1とuser2の取り消されたSELECT権限に依存するオブジェクトもすべて、前述のように影響を受ける可能性があります。
ALTERまたはINDEXオブジェクト権限を取り消しても、ALTERおよびINDEX DDLの各オブジェクト権限を必要とするオブジェクト定義には影響を与えません。たとえば、別のユーザーに属する表に索引を作成したユーザーからINDEX権限を取り消しても、その索引はそのまま残ります。
親トピック: 権限の取消しによる連鎖的な影響
PUBLICロールに対する権限の付与と取消し
ロールPUBLICに対して、権限とロールの付与および取消しを実行できます。
PUBLICにはすべてのデータベース・ユーザーがアクセスできるため、PUBLICに対して付与されたすべての権限またはロールには、すべてのデータベース・ユーザーがアクセスできます。デフォルトでは、PUBLICは付与される権限がありません。
セキュリティ管理者とデータベース・ユーザーは、すべてのデータベース・ユーザーが権限またはロールを必要としている場合のみ、PUBLICに権限またはロールを付与してください。これによって、各データベース・ユーザーには常に、現在のグループ・タスクの正常実行に必要な権限のみが付与されているという一般規則が保証されます。
PUBLICロールから権限を取り消すと、かなりの規模で影響が連鎖する可能性があります。DML操作に関連する任意の権限をPUBLICから取り消すと(たとえばSELECT ANY TABLEまたはUPDATE ON emp)、データベース内のファンクションとパッケージを含むすべてのプロシージャが再認可されるまで再び使用できなくなります。したがって、DMLに関連する権限をPUBLICに付与したり、取り消す場合には注意が必要です。
関連項目:
-
オブジェクト依存性の管理の詳細は、『Oracle Database管理者ガイド』を参照してください。
親トピック: 権限とロール認可の構成
オペレーティング・システムまたはネットワークを使用したロールの付与
オペレーティング・システムまたはネットワークを使用してロールを管理すると、大規模エンタープライズでのロールの一元管理が容易になります。
- オペレーティング・システムまたはネットワークを使用したロールの付与について
Oracle Databaseを実行するオペレーティング・システムを使用して、接続時にロールをユーザーに付与できます。 - オペレーティング・システムのロール識別機能
OS_ROLES初期化パラメータを使用して、オペレーティング・システムがロールをどのように識別するかを制御できます。 - オペレーティング・システムのロール管理機能
オペレーティング・システムによって管理されているロールを使用する場合は、データベース・ロールがオペレーティング・システムのユーザーに付与されることに注意してください。 - OS_ROLESがTRUEに設定されている場合のロールの付与と取消し
OS_ROLES初期化パラメータをTRUEに設定すると、ユーザーに対するロールの付与と取消しをオペレーティング・システムで管理できるようになります。 - OS_ROLESがTRUEに設定されている場合のロールの有効化と無効化
OS_ROLES初期化パラメータをTRUEに設定すると、オペレーティング・システムによって付与されたロールをSET ROLE文で動的に有効にできます。 - オペレーティング・システムによるロール管理使用時のネットワーク接続
ロールがオペレーティング・システムによって管理されている場合、デフォルトでユーザーは共有サーバーを通じてデータベースに接続できません。
親トピック: 権限とロール認可の構成
オペレーティング・システムまたはネットワークを使用したロールの付与について
Oracle Databaseを実行するオペレーティング・システムを使用して、接続時にロールをユーザーに付与できます。
この機能を使用することでセキュリティ管理者は、ユーザーのデータベース・ロールをGRANT文やREVOKE文を使用して明示的に付与したり取り消したりする必要がなくなります。
つまり、オペレーティング・システムを使用してロールを管理し、ユーザーのセッション作成時にOracle Databaseにそのロールを渡すことができます。このメカニズムの一部として、ユーザーのデフォルト・ロールや、ADMINオプション付きでユーザーに付与するロールを識別できます。オペレーティング・システムを使用してロールを使用するユーザーを認可する場合は、必ずすべてのロールをデータベース内に作成し、GRANT文を使用してそのロールに権限を割り当てる必要があります。
ロールは、ネットワーク・サービスを介しても付与できます。
ユーザーのデータベース・ロールを識別するためにオペレーティング・システムを使用する方法の利点は、Oracleデータベースの権限管理をデータベースの外部で実施できることです。オペレーティング・システムに組み込まれたセキュリティ機能によって、ユーザーの権限が制御されます。また、このオプションを使用すると、いくつかのシステム・アクティビティのセキュリティを集中管理できるため、次のような状況で役立ちます。
-
MVS版Oracleの管理者が、データベース・ユーザーのロールを識別するためにRACFグループを使用する場合
-
UNIX版Oracleの管理者が、データベース・ユーザーのロールを識別するためにUNIXグループを使用する場合
-
VMS版Oracleの管理者が、データベース・ユーザーのロールを識別するために権限識別子を使用する場合
ユーザーのデータベース・ロールを識別するためにオペレーティング・システムを使用する方法の主なデメリットは、権限管理がロール・レベルでしか実施できないことです。個々の権限は、オペレーティング・システムを使用して付与することはできません。ただし、GRANT文を使用してデータベース内で付与することは可能です。
この機能を使用する際の第2のデメリットは、オペレーティング・システムがロールを管理している場合に、デフォルトではユーザーが共有サーバーまたはその他のネットワーク接続を介してデータベースに接続できないことです。ただし、このデフォルトはオペレーティング・システムによるロール管理使用時のネットワーク接続の説明に従って変更できます。
データベース管理者のオペレーティング・システム認証を使用できるのは、CDBルートの場合のみです。PDB、アプリケーション・ルートおよびアプリケーションPDBには使用できません。
ノート:
この項で説明されている機能は、一部のオペレーティング・システムでしか使用できません。これらの機能が使用できるかどうかを確認するには、使用しているオペレーティング・システム固有のOracle Databaseマニュアルを参照してください。
オペレーティング・システムのロール識別機能
OS_ROLES初期化パラメータを使用して、オペレーティング・システムがロールをどのように識別するかを制御できます。
セッションの作成時に、データベースがオペレーティング・システムを使用して各ユーザーのデータベース・ロールを識別するように、初期化パラメータOS_ROLESをTRUEに設定します。
インスタンスが現在稼働している場合、そのインスタンスを再起動する必要があります。ユーザーがデータベースとのセッションを作成しようとすると、Oracle Databaseはオペレーティング・システムによって識別されるデータベース・ロールを使用して、そのユーザーのセキュリティ・ドメインを初期化します。
ユーザーのデータベース・ロールを識別するためには、各Oracle Databaseユーザーのオペレーティング・システム・アカウントが、どのデータベース・ロールをユーザーが使用できるようになるかを示すオペレーティング・システム識別子(これらはグループ、権限識別子、または他の類似した名前で呼ばれる場合があります)を持っている必要があります。ロールの指定は、どのロールがユーザーのデフォルト・ロールであるか、どのロールがADMINオプションで使用可能かを示すことも可能です。どのオペレーティング・システムを使用している場合も、オペレーティング・システム・レベルでのロールの指定は次の形式になります。
ora_ID_ROLE[[_d][_a][_da]]
詳細は、次のとおりです。
-
IDの定義は、オペレーティング・システムが異なると変わります。たとえばVMSでは、IDはデータベースのインスタンス識別子、VMSではコンピュータ・タイプ、UNIXではシステムIDです。IDは、ORACLE_SIDと照合する際に大/小文字が区別されます。ROLEでは、大/小文字は区別されません。 -
ROLEは、データベース・ロールの名前です。 -
dは、このロールがデータベース・ユーザーのデフォルト・ロールであることを示すオプション文字です。 -
aは、このロールがADMINオプション付きでユーザーに付与されることを示すオプション文字です。このオプション文字を指定することによって、ユーザーはこのロールを他のロールにのみ付与できるようになります。オペレーティング・システムを使用してロールを管理している場合は、ユーザーにロールを付与できません。dまたはaのいずれかを指定する場合は、その文字の直前にアンダースコア(_)を指定してください。
たとえば、オペレーティング・システム・アカウントが、プロファイルで識別される次のロールを持っているとします。
ora_PAYROLL_ROLE1 ora_PAYROLL_ROLE2_a ora_PAYROLL_ROLE3_d ora_PAYROLL_ROLE4_da
対応するユーザーがOracle Databaseのpayrollインスタンスに接続すると、role3とrole4がデフォルト・ロールになり、role2とrole4がADMINオプション付きで付与されます。
オペレーティング・システムのロール管理機能
オペレーティング・システムによって管理されているロールを使用する場合は、データベース・ロールがオペレーティング・システムのユーザーに付与されることに注意してください。
オペレーティング・システム・ユーザーが接続できるデータベース・ユーザーは、認可されたデータベース・ロールを使用できます。このため、OS_ROLES = TRUEを使用している場合は、権限が付与されているオペレーティング・システム・アカウントにデータベース・アカウントを対応付けるために、すべてのOracle DatabaseユーザーをIDENTIFIED EXTERNALLYとして定義することを考慮してください。
OS_ROLESがTRUEに設定されている場合のロールの付与と取消し
OS_ROLES初期化パラメータをTRUEに設定すると、ユーザーに対するロールの付与と取消しをオペレーティング・システムで管理できるようになります。
それまでにGRANT文によってユーザーに付与されたロールは適用されません。ただし、それらのロールはデータ・ディクショナリには残っています。オペレーティング・システム・レベルでのユーザーへのロールの付与のみが適用されます。この場合も、ユーザーは権限をロールとユーザーに付与できます。
ノート:
オペレーティング・システムによってADMINオプション付きでロールが付与された場合、ユーザーはそのロールを他のロールにのみ付与できます。
OS_ROLESがTRUEに設定されている場合のロールの有効化と無効化
OS_ROLES初期化パラメータをTRUEを設定すると、オペレーティング・システムによって付与されたロールをSET ROLE文で動的に有効にできます。
ロールがパスワードやオペレーティング・システムによる認可を必要とするように定義されていた場合でも、この文は適用されます。ただし、ユーザーのオペレーティング・システム・アカウントで識別されないロールは、SET ROLE文では指定できません。これは、OS_ROLES = FALSEのときにGRANT文を使用してロールを付与していた場合でも同じです。(このようなロールを指定しても無視されます。)
OS_ROLESがTRUEに設定されている場合、ユーザーは最大148個のロールを使用可能にできます。この数には、ロールに付与されている可能性のある他のロールも含まれることに注意してください。
オペレーティング・システムによるロール管理使用時のネットワーク接続
ロールがオペレーティング・システムによって管理されている場合、デフォルトでユーザーは共有サーバーを通じてデータベースに接続できません。
リモート・ユーザーは保護されていない接続を介して別のオペレーティング・システム・ユーザーになりすますおそれがあるため、デフォルトでこのような制限が適用されています。
このようなセキュリティに対する危険性の心配がない場合は、初期化パラメータREMOTE_OS_ROLESをTRUEに設定することで、共有サーバーまたはその他のネットワーク接続でオペレーティング・システムのロール管理を使用できます。この変更は、次回インスタンスを起動して、データベースをマウントするときに有効になります。このパラメータのデフォルト設定はFALSEです。
SET ROLEおよびデフォルト・ロールの設定による権限の付与と取消しの機能
権限付与およびSET ROLE文は、付与と取消しが適用されるタイミングと方法に影響します。
- 権限の付与と取消しが有効になるとき
付与と取消しがいつ有効になるかは、付与または取り消す権限によって異なります。 - SET ROLE文が付与と取消しに与える影響
ユーザーまたはアプリケーションは、ユーザー・セッション中にSET ROLE文を何度でも使用して、そのセッションで使用可能になっているロールを変更できます。 - ユーザーのデフォルト・ロールの指定
ユーザーがログインすると、Oracle Databaseではそのユーザーに明示的に付与されている権限と、そのユーザーのデフォルト・ロールに含まれる権限が、すべて使用可能になります。 - ユーザーが使用可能にできるロールの最大数
ロールはいくつでもユーザーに付与できますが、任意の時点でログイン・ユーザーに対して有効にできるロール数は最大148個です。
親トピック: 権限とロール認可の構成
権限の付与と取消しが有効になるとき
付与と取消しがいつ有効になるかは、付与または取り消す権限によって異なります。
権限の付与と取消しは次のように有効になります。
-
任意の対象(ユーザー、ロールおよび
PUBLIC)に対するシステム権限とオブジェクト権限の付与および取消しは、即時に有効になります。 -
任意の対象(ユーザー、他のロール、
PUBLIC)に対するロールの付与および取消しが有効になるのは、その付与および取消しの実行後、ロールを再度使用可能にするために現行のユーザー・セッションでSET ROLE文を発行したとき、あるいはその付与または取消しを実行した後に新しくユーザー・セッションを作成したときです。
現在使用可能なロールは、SESSION_ROLESデータ・ディクショナリ・ビューを問い合せることによって確認できます。
SET ROLE文が付与と取消しに与える影響
ユーザーまたはアプリケーションは、ユーザー・セッション中にSET ROLE文を何度でも使用して、そのセッションで使用可能になっているロールを変更できます。
ユーザーには、SET ROLE文で指定したロールが、事前に付与されている必要があります。
次の例では、すでに付与されているロールclerkを使用可能にして、パスワードを指定しています。
SET ROLE clerk IDENTIFIED BY password;
「パスワードの最低要件」のガイドラインに従って、passwordを安全なパスワードに置き換えます。
次の例は、SET ROLEを使用してすべてのロールを使用禁止にする方法を示しています。
SET ROLE NONE;
ユーザーのデフォルト・ロールの指定
ユーザーがログインすると、Oracle Databaseではそのユーザーに明示的に付与されている権限と、そのユーザーのデフォルト・ロールに含まれる権限が、すべて使用可能になります。
- デフォルト・ロールの設定対象のユーザーにロールが
GRANT文で直接付与されているか、CREATE ROLE権限があるユーザーによってロールが作成されていることを確認します。 DEFAULT ROLE句を指定してALTER USER文を使用して、ユーザーのデフォルト・ロールを指定します。
たとえば、ユーザーjaneに対してデフォルト・ロールのpayclerkとpettycashを設定する方法は、次のとおりです。
ALTER USER jane DEFAULT ROLE payclerk, pettycash;
ALTER USER文のDEFAULT ROLE句の制限事項は、『Oracle Database SQL言語リファレンス』を参照してください。
CREATE USER文ではユーザーのデフォルト・ロールを設定できません。ユーザーを最初に作成すると、デフォルトのユーザー・ロール設定はALLであり、ユーザーにその後に付与されるすべてのロールがデフォルト・ロールになります。デフォルトのユーザー・ロールを制限するには、ALTER USER文を使用します。
ノート:
(グローバル・ロールやアプリケーション・ロール以外の)ロールを作成すると、このロールが自分に暗黙的に付与され、自分のデフォルト・ロールのセットが新しいロールを含むように更新されます。ユーザー・セッションで有効にできるロールは148個のみであることに注意してください。DBAロールのような集計ロールがユーザーに付与されると、そのロールに付与されるロールはユーザーが持っているロール数に含まれます。たとえば、あるロールには20個のロールが付与されており、そのロールをユーザーに付与すると、そのユーザーは21個の追加ロールを持っていることになります。したがって、新しいロールをユーザーに付与するときは、ALTER USER文のDEFAULT ROLE句を使用してそのユーザーのデフォルト・ロールとして指定されるロールが多すぎないよう確認してください。
ユーザー権限およびロールのデータ・ディクショナリ・ビュー
特別な問合せを使用して、様々なタイプの権限およびロール付与に関する情報を入手できます。
- 権限およびロール付与の情報を確認するデータ・ディクショナリ・ビュー
Oracle Databaseには、権限およびロール付与に関する情報を表示するデータ・ディクショナリ・ビューが用意されています。 - すべてのシステム権限の付与を表示する問合せ
DBA_SYS_PRIVSデータ・ディクショナリ・ビューは、ロールとユーザーに対して付与されているすべてのシステム権限を返します。 - すべてのロール付与を表示する問合せ
DBA_ROLE_PRIVS問合せは、ユーザーと他のロールに対して付与されているロールをすべて返します。 - ユーザーに付与されているオブジェクト権限を表示する問合せ
DBA_TAB_PRIVSおよびDBA_COL_PRIVSデータ・ディクショナリ・ビューには、ユーザーに付与されているオブジェクト権限が表示されます。 - セッションの現在の権限ドメインを表示する問合せ
SESSION_ROLESおよびSESSION_PRIVSデータ・ディクショナリ・ビューには、データベース・セッションの現在の権限ドメインが表示されます。 - データベースのロールを表示する問合せ
DBA_ROLESデータ・ディクショナリ・ビューでは、データベースのすべてのロールと各ロールに対して使用されている認証が表示されます。 - ロールの権限ドメイン情報を表示する問合せ
ROLE_ROLE_PRIVS、ROLE_SYS_PRIVSおよびROLE_TAB_PRIVSの各データ・ディクショナリ・ビューには、ロールの権限ドメインに関する情報が表示されます。
親トピック: 権限とロール認可の構成
権限およびロール付与の情報を確認するデータ・ディクショナリ・ビュー
Oracle Databaseには、権限およびロール付与に関する情報を表示するデータ・ディクショナリ・ビューが用意されています。
表4-9に、権限とロールの付与に関する情報にアクセスするために問合せ可能なビューを示します。
表4-9 権限およびロール情報を表示するデータ・ディクショナリ・ビュー
| ビュー | 説明 |
|---|---|
|
|
オブジェクト所有者、権限付与者または権限受領者が現行ユーザーまたは |
|
|
オブジェクト所有者または権限付与者が現行ユーザーである列オブジェクトの権限付与がリストされます |
|
|
権限受領者が現行ユーザーまたは |
|
|
権限受領者がユーザーまたは |
|
|
現行ユーザーが行ったオブジェクトの権限付与、または現行ユーザーが所有するオブジェクトに対する権限付与がすべてリストされます |
|
|
権限受領者がユーザーまたは |
|
|
データベース内の列オブジェクトの権限付与がすべて表示されます。 |
|
|
デフォルト(ユーザー・レベル)およびオブジェクト固有の |
|
|
別のユーザー権限の使用が許可されたデータベース・アクセス記述子(DAD)が表示されます |
|
|
PDBロックダウン・プロファイルに関する情報が表示されます |
|
|
オブジェクト・リンクまたはメタデータ・リンクがあるオブジェクトがリストされます。これらのオブジェクトを確認するには、 |
|
|
データベース内のすべてのオブジェクトに対するすべての権限付与がリストされます。 |
|
|
セキュア・アプリケーション・ロールを含めて、データベース内に存在するすべてのロールがリストされます |
|
|
ユーザーとロールに直接付与されているロールがリストされます。 |
|
|
ユーザーとロールに付与されているシステム権限がリストされます。 |
|
|
他のロールに付与されているロールがリストされます。ユーザーがアクセス権限を持っているロールの情報のみが得られます |
|
|
ロールに付与されているシステム権限がリストされます。ユーザーがアクセス権限を持っているロールの情報のみが得られます |
|
|
ロールに付与されているオブジェクト権限がリストされます。ユーザーがアクセス権限を持っているロールの情報のみが得られます |
|
|
ユーザーに対して現在使用可能になっている権限がリストされます。 |
|
|
現在のユーザーに対して使用可能になっているすべてのロールがリストされます。 |
USER_APPLICATION_ROLES |
現行ユーザーが、ユーザーに付与されているすべてのアプリケーション・ロールを表示できるようにします |
|
|
オブジェクト所有者、権限付与者または権限受領者が現行ユーザーである列オブジェクトの権限付与が表示されます。 |
|
|
オブジェクト所有者が現行ユーザーである列オブジェクトの権限付与が表示されます。 |
|
|
権限受領者が現行ユーザーである列オブジェクトの権限付与が表示されます。 |
|
|
別のユーザー権限の使用が許可されたデータベース・アクセス記述子(DAD)が表示されます |
|
|
現行ユーザーに直接付与されているロールがリストされます。 |
|
|
権限受領者が現行ユーザーであるすべてのオブジェクトの権限付与がリストされます。 |
|
|
現行ユーザーに付与されているシステム権限がリストされます。 |
|
|
現行ユーザーが所有しているすべてのオブジェクトの権限付与がリストされます。 |
|
|
権限受領者が現行ユーザーであるオブジェクトの権限付与がリストされます。 |
|
|
管理権限を付与された現在のPDBのすべてのユーザーをリストします |
次の表に、権限とロールの付与に関する情報にアクセスするために問合せ可能なビューを示します。
ここでは、これらのビューの使用例をいくつか示します。各例では、次の文がすでに発行されていることを前提としています。
CREATE ROLE security_admin IDENTIFIED BY password;
GRANT CREATE PROFILE, ALTER PROFILE, DROP PROFILE,
CREATE ROLE, DROP ANY ROLE, GRANT ANY ROLE, AUDIT ANY,
AUDIT SYSTEM, CREATE USER, BECOME USER, ALTER USER, DROP USER
TO security_admin WITH ADMIN OPTION;
GRANT READ, DELETE ON SYS.AUD$ TO security_admin;
GRANT security_admin, CREATE SESSION TO swilliams;
GRANT security_admin TO system_administrator;
GRANT CREATE SESSION TO jward;
GRANT READ, DELETE ON emp TO jward;
GRANT INSERT (ename, job) ON emp TO swilliams, jward;関連項目:
これらのデータ・ディクショナリ・ビューの詳細は、『Oracle Databaseリファレンス』を参照してください
親トピック: ユーザー権限およびロールのデータ・ディクショナリ・ビュー
すべてのシステム権限の付与を表示する問合せ
DBA_SYS_PRIVSデータ・ディクショナリ・ビューは、ロールとユーザーに対して付与されているすべてのシステム権限を返します。
例:
SELECT GRANTEE, PRIVILEGE, ADM FROM DBA_SYS_PRIVS; GRANTEE PRIVILEGE ADM -------------- --------------------------------- --- SECURITY_ADMIN ALTER PROFILE YES SECURITY_ADMIN ALTER USER YES SECURITY_ADMIN AUDIT ANY YES SECURITY_ADMIN AUDIT SYSTEM YES SECURITY_ADMIN BECOME USER YES SECURITY_ADMIN CREATE PROFILE YES SECURITY_ADMIN CREATE ROLE YES SECURITY_ADMIN CREATE USER YES SECURITY_ADMIN DROP ANY ROLE YES SECURITY_ADMIN DROP PROFILE YES SECURITY_ADMIN DROP USER YES SECURITY_ADMIN GRANT ANY ROLE YES SWILLIAMS CREATE SESSION NO JWARD CREATE SESSION NO
親トピック: ユーザー権限およびロールのデータ・ディクショナリ・ビュー
すべてのロール付与を表示する問合せ
DBA_ROLE_PRIVS問合せは、ユーザーと他のロールに対して付与されているロールをすべて返します。
例:
SELECT * FROM DBA_ROLE_PRIVS; GRANTEE GRANTED_ROLE ADM ------------------ ------------------------------------ --- SWILLIAMS SECURITY_ADMIN NO
親トピック: ユーザー権限およびロールのデータ・ディクショナリ・ビュー
ユーザーに付与されているオブジェクト権限を表示する問合せ
DBA_TAB_PRIVSおよびDBA_COL_PRIVSデータ・ディクショナリ・ビューには、ユーザーに付与されているオブジェクト権限が表示されます。
DBA_TAB_PRIVSデータ・ディクショナリ・ビューは、指定のユーザーに対して付与されているオブジェクト権限をすべて(列固有の権限を除く)返します。
例:
SELECT TABLE_NAME, PRIVILEGE, GRANTABLE FROM DBA_TAB_PRIVS
WHERE GRANTEE = 'jward';
TABLE_NAME PRIVILEGE GRANTABLE
----------- ------------ ----------
EMP SELECT NO
EMP DELETE NO
付与されている列固有の権限をすべて表示するには、次の問合せを使用します。
SELECT GRANTEE, TABLE_NAME, COLUMN_NAME, PRIVILEGE
FROM DBA_COL_PRIVS;
GRANTEE TABLE_NAME COLUMN_NAME PRIVILEGE
----------- ------------ ------------- --------------
SWILLIAMS EMP ENAME INSERT
SWILLIAMS EMP JOB INSERT
JWARD EMP NAME INSERT
JWARD EMP JOB INSERT
親トピック: ユーザー権限およびロールのデータ・ディクショナリ・ビュー
セッションの現在の権限ドメインを表示する問合せ
SESSION_ROLESおよびSESSION_PRIVSデータ・ディクショナリ・ビューには、データベース・セッションの現在の権限ドメインが表示されます。
SESSION_ROLESビューでは、発行者が現在使用できるロールがすべて表示されます。
例:
SELECT * FROM SESSION_ROLES;
ユーザーswilliamsに対してsecurity_adminロールが使用可能になっている場合に、この問合せを実行すると、Oracle Databaseから次の情報が戻されます。
ROLE ------------------------------ SECURITY_ADMIN
次の問合せを実行すると、発行者のセキュリティ・ドメインで現在使用可能なシステム権限がすべて表示されます。これには、明示的に付与されている権限と使用可能なロールから付与された権限の両方が含まれています。
SELECT * FROM SESSION_PRIVS;
ユーザーswilliamsに対してsecurity_adminロールが使用可能になっている場合に、この問合せを実行すると、Oracle Databaseから次の結果が戻されます。
PRIVILEGE ---------------------------------------- AUDIT SYSTEM CREATE SESSION CREATE USER BECOME USER ALTER USER DROP USER CREATE ROLE DROP ANY ROLE GRANT ANY ROLE AUDIT ANY CREATE PROFILE ALTER PROFILE DROP PROFILE
ユーザーswilliamsに対してsecurity_adminロールが使用禁止になっている場合、最初の問合せでは何も表示されず、2番目の問合せではCREATE SESSION権限の付与に関する行が1行のみ表示されます。
親トピック: ユーザー権限およびロールのデータ・ディクショナリ・ビュー
データベースのロールを表示する問合せ
DBA_ROLESデータ・ディクショナリ・ビューでは、データベースのすべてのロールと各ロールに対して使用されている認証が表示されます。
例:
SELECT * FROM DBA_ROLES; ROLE PASSWORD ---------------- -------- CONNECT NO RESOURCE NO DBA NO SECURITY_ADMIN YES
親トピック: ユーザー権限およびロールのデータ・ディクショナリ・ビュー
ロールの権限ドメイン情報を表示する問合せ
ROLE_ROLE_PRIVS、ROLE_SYS_PRIVSおよびROLE_TAB_PRIVSの各データ・ディクショナリ・ビューには、ロールの権限ドメインに関する情報が表示されます。
例:
SELECT GRANTED_ROLE, ADMIN_OPTION FROM ROLE_ROLE_PRIVS WHERE ROLE = 'SYSTEM_ADMIN'; GRANTED_ROLE ADM ---------------- ---- SECURITY_ADMIN NO
次の問合せを実行すると、security_adminロールに付与されているシステム権限がすべて表示されます。
SELECT * FROM ROLE_SYS_PRIVS WHERE ROLE = 'SECURITY_ADMIN'; ROLE PRIVILEGE ADM ----------------------- ----------------------------- --- SECURITY_ADMIN ALTER PROFILE YES SECURITY_ADMIN ALTER USER YES SECURITY_ADMIN AUDIT ANY YES SECURITY_ADMIN AUDIT SYSTEM YES SECURITY_ADMIN BECOME USER YES SECURITY_ADMIN CREATE PROFILE YES SECURITY_ADMIN CREATE ROLE YES SECURITY_ADMIN CREATE USER YES SECURITY_ADMIN DROP ANY ROLE YES SECURITY_ADMIN DROP PROFILE YES SECURITY_ADMIN DROP USER YES SECURITY_ADMIN GRANT ANY ROLE YES
次の問合せを実行すると、security_adminロールに付与されているオブジェクト権限がすべて表示されます。
SELECT TABLE_NAME, PRIVILEGE FROM ROLE_TAB_PRIVS
WHERE ROLE = 'SECURITY_ADMIN';
TABLE_NAME PRIVILEGE
--------------------------- ----------------
AUD$ DELETE
AUD$ SELECT
親トピック: ユーザー権限およびロールのデータ・ディクショナリ・ビュー
