ALTER ROLE

ALTER ROLEはユーザー・ロール(役割)を変更するSQL文である。

Oracleデータベースにおいて、ロールはユーザー・グループの役割を果たす。ロールに権限を付与することができ、そのロールをユーザに付与することができる。

PostgreSQLにおけるロールはユーザとユーザー・グループの両方にあたるので、Oracleデータベースのロールとは意味合いが異なる。

パスワードの変更

ロールのパスワードを変更するには、ALTER ROLE 文に IDENTIFIED BY 句を指定する。

ALTER ROLE role IDENTIFIED BY password
role

パスワードを変更するロールの名前を指定する。

password

変更後のパスワードを指定する。パスワードを引用符で括る必要はない。

ロールのパスワードを変更する例を次に示す。

ALTER ROLE example IDENTIFIED BY newpassword

パスワードの削除

ロールに設定されたパスワードを削除すると、パスワードを入力しなくてもロールを使えるようになる。

ロールのパスワードを削除するには、ALTER ROLE 文に NOT IDENTIFIED 句を指定する。

ALTER ROLE example NOT IDENTIFIED

外部ロールへ変更

外部ロールを使用すると、OSなどの外部サービスによる認可が必要になる。

ロールを外部ロールへ変更するには、ALTER ROLE 文に IDENTIFIED EXTERNALLY 句を指定する。

ALTER ROLE example IDENTIFIED EXTERNALLY

グローバル・ロールへ変更

グローバル・ロールを使用すると、エンタープライズ・ディレクトリ・サービスによる認可が必要になる。

ロールをグローバル・ロールへ変更するには、ALTER ROLE 文に IDENTIFIED GLOBALLY 句を指定する。

ALTER ROLE example IDENTIFIED GLOBALLY

アプリケーション・ロールへ変更

アプリケーション・ロールとは、PL/SQL パッケージによって有効にできるロールである。アプリケーション・ロールでは、ロール自体に付与された権限に加えて、アプリケーション・アクセスにセキュリティの追加レイヤを作成できる。

アプリケーション・ロールを使用すると、パスワードがアプリケーションのソースコードに埋め込まれたり、表に格納されないため、セキュリティが強化される。

ロールをアプリケーション・ロールへ変更するには、ALTER ROLE 文に IDENTIFIED USING 句を指定する。

ALTER ROLE example IDENTIFIED USING humanresources.admin

権限

ロールを変更するには、ALTER ANY ROLEシステム権限が必要である。

ただし、ADMIN OPTION が付いたロールを付与されていれば、誰でもそのロールを変更できる。

自分に付与されたシステム権限を確認するには、USER_SYS_PRIVS データ・ディクショナリ・ビューを問い合わせる。

SELECT PRIVILEGE FROM USER_SYS_PRIVS

ロールを付与するときに、ADMIN OPTION を付けられる。

GRANT manager TO tsuka WITH ADMIN OPTION

付与されたロールに ADMIN OPTION が付いているかどうかは、USER_ROLE_PRIVS データ・ディクショナリ・ビューを問い合わせる。

SQL> SELECT GRANTED_ROLE, ADMIN_OPTION FROM USER_ROLE_PRIVS;

GRANTED_ROLE ADMIN_OPTION
------------ ------------
MANAGER      YES
CHARIMAN     NO

ロールに関するSQL

ロールに関するSQL文には次のものがある。

ロールに関するSQL
SQL 説明
CREATE ROLE ロールを作成する。
ALTER ROLE ロールを変更する。
DROP ROLE ロールを削除する。
GRANT ロールに権限を付与したり、ユーザにロールを付与する。
REVOKE ロールから権限を剥奪したり、ユーザからロールを剥奪する。

ロールに関するシステム権限

ロールに関するシステム権限には次のものがある。

ロールに関するシステム権限
システム権限 説明
CREATE ROLE 自分のスキーマにロールを作成できる。
ALTER ANY ROLE 任意のスキーマにあるロールを変更できる。
DROP ANY ROLE 任意のスキーマにあるロールを削除できる。
GRANT ANY ROLE 任意のロールを付与できる。

データディクショナリビュー

ロールに関するデータ・ディクショナリ・ビューには、次のものがある。

DBA_ROLE_PRIVS
Oracleデータベース内のすべてのユーザーおよびロールに付与されたロール
DBA_ROLES
データベース内のすべてのロール
ROLE_ROLE_PRIVS
別のロールに付与されたロール
USER_ROLE_PRIVS
現在のユーザーに付与されたロール

PostgreSQL

PostgreSQL の ALTER ROLE 文でデータベースロールを変更できる。

ALTER ROLE role_specification [ WITH ] option [ ... ]
ALTER ROLE name RENAME TO new_name
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ]
  SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ]
  SET configuration_parameter FROM CURRENT
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE { role_specification | ALL } [ IN DATABASE database_name ] RESET ALL