- Home ›
- PostgreSQLの使い方 ›
- ロール(ユーザー)の作成 ›
- HERE
権限の削除
ロールに与えれている権限の削除を行います。権限の削除は、権限を与えた人しか行うことが出来ません(スーパーユーザーは可)。注意する点としては、ロールAがロールCに与えた権限と、ロールBがロールCに同じ権限を与えた場合、ロールAがロールCの権限を削除してもロールBがロールCに与えた権限は残っている点などです。権限を削除するにはREVOKEを使います。
REVOKE [GRANT OPTION FOR]
{{SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER}
[,...] | ALL [PRIVILEGES]}
ON [TABLE] tablename [, ...]
FROM {username | GROUP groupname | PUBLIC} [, ...]
[CASCADE | RESTRICT]
REVOKE [GRANT OPTION FOR]
{{CREATE | TEMPORARY | TEMP} [,...] | ALL [PRIVILEGES]}
ON DATABASE dbname [, ...]
FROM {username | GROUP groupname | PUBLIC} [, ...]
[CASCADE | RESTRICT]
REVOKE [GRANT OPTION FOR]
{EXECUTE | ALL [PRIVILEGES]}
ON FUNCTION funcname ([[argmode] [argname] argtype [, ...]]) [, ...]
FROM {username | GROUP groupname | PUBLIC} [, ...]
[CASCADE | RESTRICT]
REVOKE [GRANT OPTION FOR]
{USAGE | ALL [PRIVILEGES]}
ON LANGUAGE langname [, ...]
FROM {username | GROUP groupname | PUBLIC} [, ...]
[CASCADE | RESTRICT]
REVOKE [ GRANT OPTION FOR ]
{{CREATE | USAGE} [,...] | ALL [PRIVILEGES]}
ON SCHEMA schemaname [, ...]
FROM {username | GROUP groupname | PUBLIC} [, ...]
[CASCADE | RESTRICT]
REVOKE [GRANT OPTION FOR]
{CREATE | ALL [PRIVILEGES]}
ON TABLESPACE tablespacename [, ...]
FROM {username | GROUP groupname | PUBLIC} [, ...]
[CASCADE | RESTRICT]
REVOKE [ADMIN OPTION FOR]
role [, ...]
FROM {username | GROUP groupname | PUBLIC} [, ...]
[CASCADE | RESTRICT]
GRANTの場合と似ています。基本は下記の通りです。
REVOKE 権限 ON 対象 FROM 誰から
GRANTとの違いは「誰に」が「誰から」になっているくらいです。「GRANT OPTION FOR」を付けて権限を付与された場合、権限そのものを削除するのではなく、権限を与える権利だけが削除されます。
また「CASCADE」と「RESTRICT」の違いですが、例えばロールAがロールBに権限(と権限を与える権限)を与え、ロールBがロールCに権限を与えた場合、ロールAはロールCの権限を取り消すことが出来ません(デフォルトで設定されている「RESTRICT」の場合)。ここで「CASCADE」を付けてロールAがロールBの権限を削除するとロールCの権限も合わせて削除することが出来ます。
実際の例としては下記のような感じです。
REVOKE SELECT, UPDATE, INSERT ON table_name FROM role_name;
権限の追加と確認のテスト
では試してみましょう。前のページで権限を与えた「testrole」ロールからDELETEの権限を削除してみます。
権限を与えた後に確認すると下記のように表示されます。
sample=# ¥z
Access privileges for database "sample"
Schema | Name | Type | Access privileges
--------+------+-------+---------------------------------------------------
public | test | table | {postgres=arwdRxt/postgres,testrole=arw/postgres}
(1 row)
sample=#
「testrole=arwd/postgres」が「testrole=arw/postgres」になって「DELETE」の権限が消えていることが確認できます。
( Written by Tatsuo Ikura )
DBOnline