ALTER ROLEはユーザー・ロール(役割)を変更するSQL文である。
Oracleデータベースにおいて、ロールはユーザー・グループの役割を果たす。ロールに権限を付与することができ、そのロールをユーザに付与することができる。
PostgreSQLにおけるロールはユーザとユーザー・グループの両方にあたるので、Oracleデータベースのロールとは意味合いが異なる。
ロールのパスワードを変更するには、ALTER ROLE 文に IDENTIFIED BY 句を指定する。
ALTER ROLE role IDENTIFIED BY 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 | 説明 |
---|---|
CREATE ROLE | ロールを作成する。 |
ALTER ROLE | ロールを変更する。 |
DROP ROLE | ロールを削除する。 |
GRANT | ロールに権限を付与したり、ユーザにロールを付与する。 |
REVOKE | ロールから権限を剥奪したり、ユーザからロールを剥奪する。 |
ロールに関するシステム権限には次のものがある。
システム権限 | 説明 |
---|---|
CREATE ROLE | 自分のスキーマにロールを作成できる。 |
ALTER ANY ROLE | 任意のスキーマにあるロールを変更できる。 |
DROP ANY ROLE | 任意のスキーマにあるロールを削除できる。 |
GRANT ANY ROLE | 任意のロールを付与できる。 |
ロールに関するデータ・ディクショナリ・ビューには、次のものがある。
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