ロール

ロールとは、ユーザーが権限について色々と組み合わせて名前をつけたものであり、 アカウント管理のグループのようなものである。しかし、グループによる管理とはアプローチが異なり、 ロール固有の注意すべき点もある。

Oracle Database 概要マニュアルより

ストアド・プログラム構成メンバーの中からスキーマ・オブジェクトにアクセスする権限は、直接付与する必要があるため、 ロールは、アプリケーション開発者が使用することを目的としていません。

と指摘されている点については覚えておいたほうがよい。(抜粋ですから、これを鵜呑みにしないで下さい)
これはロールがセッションにおいて SET ROLE 文でダイナミックに変更できる点などの理由から ロール経由で付与された権限が PL/SQL の実行時の権限から除外されていることへの注意であると思われる。
これを知らないと個々のステートメントはコマンドベースでは動作するのにプログラムにすると実行できない…という現象に戸惑うことになる。

参考: PL/SQL における定義者権限と実行者権限

補足:ロールは 非スキーマ・オブジェクトである。

ロールとグループ

ロールによる権限の管理は UNIX などにおけるグループによる権限の管理とは異なるアプローチである。グループは「ユーザー(スキーマ)の集まり」を定義して、そのグループに対して名前付けと権限の設定を行なう。

ロールによる権限の管理は「権限の集まり」を定義して、その集合に対して名前付けを行う。その「ロール」をユーザーに与える (GRANT) という形を取る。SET ROLE コマンドを用いることでセッション中のロールを一時的に有効、無効化することもできる。
参考: SESSION_ROLES ディクショナリビュー

ロールの階層構造 (WITH GRANT OPTION / WITH ADMIN OPTION)

GRANT に WITH GRANT OPTION オプションを併用した場合、与えられた オブジェクト権限 を他のユーザーにも与えることができるようになる。 権限の付与元は データ・ディクショナリ にも記録されている。

ロールの階層図

この階層構造によって付与元の権限が削除 (REVOKE) されたときには、その影響が付与先の権限にも伝播することによって与えられた権限はカスケードして削除されていく。

システム権限 の場合には WITH GRANT オプションでなく WITH ADMIN オプションを使用する。

DBA ロール

DBA ロールとは、インストール時には既に定義されているロールの一つである。しかし、このロールの歴史は古く、乱暴に言うと大雑把なロールであるため、SQL リファレンス・マニュアルには、今後のバージョンで自動的に作成されない可能性があると書かれている。
とはいっても DBA ロールに関しては CONNECT、RESOURCE とは異なり、ほぼすべて(※)のデータベースシステム権限を WITH ADMIN OPTION 付きでもつユニークなロールである。そのため(願望も含めて)DBA だけは存続する可能性が高いと思う。(CONNECT や RESOURCE ロールは消えてもほとんど困らない)

(※) 代表的な所有していない権限は SYSDBA、SYSOPER など

CREATE ROLE

ロール作成とユーザーへの付与の例 (オブジェクト権限、システム権限、ロール)

CREATE ROLE role_name;
-- オブジェクト権限
GRANT SELECT,INSERT,UPDATE,DELETE ON table_name TO role_name WITH GRANT OPTION ;
-- ロール
GRANT EXP_FULL_DATABASE TO role_name;
-- システム権限
GRANT CREATE TABLE TO role_name;
-- ユーザーへの付与と削除
GRANT role_name to user_name;
REVOKE role_name from user_name;


ロール 関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)