9章 ロール
データベース管理システムが必要な理由
本章ではロールについて学んでいきます。
ロールを使用し複数の権限をグループ化することで管理を簡単にしていきましょう。
ロールは権限の入れ物のような機能です。ロールに複数の権限を付与し、
ユーザに付与することでロールに付与された複数の権限を使用することができます。
 
ロールの特徴は以下の通りです。
・ロールに対し複数の権限を付与できる
・ロールに対しロールを付与できる
・1つのロールを複数のユーザに付与できる
ロールは多くの権限を多くのユーザに付与したい場合に便利な機能です。
また1つのロールでまとめて権限を付与できるので管理が楽になります。
事前定義のロール
データベースを作成すると自動的に作成される事前定義ロールがあります。
| CONNECTロール | CREATE SESSIONが付与されたロール | 
| RESOURCEロール | CREATE TABLE権限などのCREATE系の 権限が付与されたロール
 | 
| DBAロール | WITH ADMIN OPTION付きのすべての 権限が付与されたロール
 | 
上記以外のロールも多くありますので、詳しい内容はマニュアルを参照してください。
「Oracle Databaseセキュリティ・ガイド 12cリリース1 (12.1)」
ではロールの作成方法です。
  [構文] ロールの作成
 CREATE ROLE ロール名;
上記構文でロールを作成後、ユーザに権限を付与するのと
同じように権限をロールに付与していきます。
  SQL> CREATE ROLE TEST_ROLE;
  Role created.
  SQL> GRANT CREATE SESSION TO TEST_ROLE;
  Grant succeeded.
  SQL> GRANT SELECT ON test_user.test_tbl TO TEST_ROLE;
  Grant succeeded.
TEST_ROLEという名前のロールを作成し、
その後、CREATE SESSIONとSELECT権限を付与しました。
では前回作成したTOMユーザにTEST_ROLEを付与してみましょう。
  SQL> GRANT test_role TO tom;
  Grant succeeded.
 
TOMユーザはtest_roleを付与されたので、CREATE SESSIONと
test_userユーザのtest_tblテーブルのSELECT権限を使用できます。
セキュアロール
ロールは付与されたら、そのロールの権限を使用することができます。
便利な反面、セキュリティとしては問題があります。
そこでロール使用時にパスワードを入力することで
セキュリティを高めることができます。
  [構文] セキュアロールの作成
 CREATE ROLE ロール名 IDENTIFIED BY パスワード;
セキュアロールはロール作成時にパスワードを設定する
IDENTIFIED BY句を使用します。
それではTOMユーザにセキュアロールを付与してみます。
  SQL> CREATE ROLE delete_test_tbl IDENTIFIED BY test;
  Role created.
  SQL> GRANT delete ON test_user.test_tbl TO delete_test_tbl;
  Grant succeeded.
  SQL> GRANT delete_test_tbl TO tom;
  Grant succeeded.
  SQL> conn tom/tom
  Connected.
  SQL> DELETE FROM test_user.test_tbl;
  delete from test.test
                   *
  ERROR at line 1:
  ORA-01031: insufficient privileges
  SQL> SET ROLE delete_test_tbl IDENTIFIED BY test;
  Role set.
  SQL> DELETE FROM test_user.test_tbl;
  1 row deleted.
  
上記例の様にロールはSET ROLEコマンドを使用しパスワードを入力することで、
そのロールの権限を有効化することができます。
ロールの削除
最後にロールの削除方法です。
  [構文] ロールの削除
 DROP ROLE ロール名;
すでにDB接続しているユーザのロールも削除可能です。
削除されたロールに付与された権限は即座に使用できなくなります。
本章は以上となります。今回はロールの管理について学んでいきました。