Oracle管理者のためのSQLリファレンス

ロールの確認/作成/付与/変更/取り消し/削除

ロールとは権限やほかのロールをひとまとめにした集合体です。権限は非常に数が多く、個別にユーザーに割り当てると管理が大変になるため、ユーザーの役割に応じたロールを作成し、これをユーザーごとに割り当てます。システムによっ事前にて定義されたロールも存在しますが、通常は管理者がセキュリティポリシーに従って作成します。(SQLの表記ルールは、こちらから参照できます)

ロールを確認する
SELECT * FROM user_role_privs;
-- または
SELECT * FROM session_roles;
-- または
SELECT * FROM dba_role_privs;
ユーザーに与えられているロールを確認するには、USER_ROLE_PRIVSまたはSESSION_ROLESまたはDBA_ROLE_PRIVSに問い合わせます。USER_ROLE_PRIVSではデータベースに接続しているユーザー自身に付与されたロールをすべて確認できるのに対して、SESSION_ROLESでは現在のセッションで有効なロールを確認できます(ロールはセッションごとに有効/無効の切り替え可能)。すべてのユーザーの情報を確認するにはDBA_ROLE_PRIVSに問い合わせますが、このビューにアクセスするにはSELECT ANY TABLE権限が必要です。この権限は、デフォルトでDBAロールに割り当てられます。
関連項目:権限の確認/付与/取り消し

ロールを作成する
CREATE ROLE role
[NOT IDENTIFIED |
 IDENTIFIED {
     BY password |
     USING [schema .] package |
     EXTERNALLY |
     GLOBALLY }];
ロールを作成するには、CREATE文のROLE句でロール名を指定します。NOT IDENTIFIED句を指定すると、パスワードを入力しなくても使用可能になります。IDENTIFIED句に続けてメソッド(BY password、USING package、EXTERNALLY、GLOBALLY)を指定すると、SET ROLE文によってロールを使用可能にする際にメソッドによるユーザー認可が必要になります。NOT IDENTIFIED句およびIDENTIFIED句を省略すると、NOT IDENTIFIEDがデフォルト値になります。
関連項目:データベースからロールを削除する

ロールにシステム権限を付与する
GRANT {system_privilege | ALL PRIVILEGES}
      [, system_privilege …]
TO role [, role …]
[WITH ADMIN OPTION];
ロールにシステム権限を付与するには、GRANT文のTO句で付与するロール名を明示し、システム権限名(system_privilege)あるいはALL PRIVILEGESを指定します。システム権限とロールは複数指定可能です。ALL PRIVILEGESを指定すると、SELECT ANY DICTIONARY権限を除き、すべてのシステム権限を付与できます。

WITH ADMIN OPTION句
WITH ADMIN OPTION句を指定すると、
  ・ロールがGLOBALロールでない場合、そのロールをほかのロールに付与可能
  ・ロールをほかのロールから取り消すことが可能
  ・ロールへのアクセスに必要な認可を変更するため、ロールを変更可能
  ・ロールを削除可能
になります。
関連項目:権限を確認する ロールにオブジェクト権限を付与する

ロールにオブジェクト権限を付与する
GRANT {object_privilege | ALL PRIVILEGES}
      [(column [, column …])]
      [, {object_privilege} [(column [, column …])]…]
ON {schema.object |
    {DIRECTORY directory_name |
     JAVA {SOURCE | RESOURCE} [schema.]object}}
TO role [, role …]
[WITH HIERARCHY OPTION];
ロールにオブジェクト権限を付与するには、GRANT文のTO句で付与するロール名を明示し、ON句で対象となるオブジェクト名(schema.object)あるいはディレクトリ・スキーマ・オブジェクト名、Javaソースおよびリソース・スキーマ・オブジェクト名を指定し、オブジェクト権限名(object_privilege)あるいはALL PRIVILEGESを指定します。オブジェクト権限とロールは複数指定可能です。権限を付与する表またはビューの列(column)を指定することも可能です(INSERT、REFERENCES、UPDATEの各権限のみ)。列を指定しないと表またはビューのすべての列に権限が付与されます。

WITH HIERARCHY OPTION句
WITH HIERARCHY OPTION句を指定すると、今後作成されるサブオブジェクトも含めてすべてのサブオブジェクトに対して権限を付与できます。
関連項目:権限を確認する ロールにシステム権限を付与する

ロールにロールを付与する
GRANT role [, role …]
TO role [, role …]
[WITH ADMIN OPTION];
システムに事前定義されたロールまたはユーザーが定義したロールをロールに付与するには、GRANT文に付与するロール名を指定し、TO句に続けて付与先のロール名を指定します。

WITH ADMIN OPTION句
WITH ADMIN OPTION句を指定すると、
  ・ロールがGLOBALロールでない場合、そのロールをほかのロールに付与可能
  ・ロールをほかのロールから取り消すことが可能
  ・ロールへのアクセスに必要な認可を変更するため、ロールを変更可能
  ・ロールを削除可能
になります。
関連項目:ロールを作成する

ロールをユーザーに付与する
GRANT role [, role …]
TO user [, user …]
[IDENTIFIED BY password]
[WITH ADMIN OPTION];
ロールをユーザーに付与するには、GRANT文で付与するロール名を指定し、TO句で付与するユーザー名を指定します。

IDENTIFIED BY句
IDENTIFIED BY句に続けてパスワードを指定すると、既存ユーザーを明確に識別できます(ユーザーが存在しない場合は新規にユーザーが作成されます)。

WITH ADMIN OPTION句
WITH ADMIN OPTION句を指定すると、
  ・ロールがGLOBALロールでない場合、そのロールをほかのロールに付与可能
  ・ロールをほかのロールから取り消すことが可能
  ・ロールへのアクセスに必要な認可を変更するため、ロールを変更可能
  ・ロールを削除可能
になります。
関連項目:ロールをユーザーから取り消す

現行セッションのロールを使用可能または使用禁止にする
SET ROLE {role [IDENTIFIED BY password]
             [, role [IDENTIFIED BY password] …] |
          ALL [EXCEPT role [, role …]] |
          NONE};
現行のセッションのロールを使用可能または使用禁止にするには、SET ROLE文を使用します。ロール名(role)を指定すると、それ以外のロールは現行のセッションで使用禁止になります。IDENTIFIED BY句では、ロールに対するパスワードを指定します。ALLを指定すると、EXCEPT句に指定したロールを除き、現行のセッションに付与されているすべてのロールを使用可能にできます。NONEを指定すると、DEFAULTロールを含むすべてのロールを現行セッションで使用禁止にできます。
関連項目:ロールを作成する ロールを使用可能にするために必要な許可を変更する

ロールを使用可能にするために必要な許可を変更する
ALTER ROLE role
[NOT IDENTIFIED |
 IDENTIFIED {
     BY password |
     USING [schema .] package |
     EXTERNALLY |
     GLOBALLY}];
ロールを使用可能にするために必要な許可を変更するには、ALTER ROLE文でロール名を指定します。NOT IDENTIFIED句を指定すると、パスワードを入力しなくても使用可能になります。IDENTIFIED句に続けてメソッド(BY password、USING package、EXTERNALLY、GLOBALLY)を指定すると、SET ROLE文によってロールを使用可能にする際にメソッドによるユーザーが認可が必要になります。このコマンドを発行するには、ロールにADMIN OPTIONが付与されているか、ALTER ANY ROLEシステム権限が必要です。
関連項目:現行セッションのロールを使用可能または使用禁止にする

ロールをユーザーから取り消す
REVOKE role[, role …]
FROM user [, user …];
ロールをユーザー取り消すには、REVOKE文で取り消すロール名を指定しFROM句で取り消すユーザーを指定します。このコマンドを発行するには、ロールにADMIN OPTIONが付与されているか、AGRANT ANY ROLEシステム権限が必要です。
関連項目:ロールをユーザーに付与する 権限を確認する

データベースからロールを削除する
DROP ROLE role;
データベースからロールを削除するにはDROP ROLE文で削除したいロールを指定します。ロールを削除すると、付与されていたすべてのユーザーおよびロールからそのロールが取り消され、データベースからも削除されます。
関連項目:ロールを作成する

Oracle管理者のためのSQLリファレンス



   Oracle関連記事リンク集


Database Expert フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Database Expert 記事ランキング

本日月間