ALTER DEFAULT PRIVILEGES
指定したユーザーによって今後作成されるオブジェクトに対して、デフォルトで適用するアクセス許可のセットを定義します。デフォルトでは、ユーザーは自分のデフォルトのアクセス許可のみ変更できます。他のユーザーに対しては、スーパーユーザーのみがデフォルトのアクセス許可を指定できます。
デフォルト権限は、ロール、ユーザー、またはユーザーグループに適用できます。デフォルトのアクセス許可は、現在のデータベースに作成されているすべてのオブジェクトにグローバルに設定することも、指定したスキーマに作成されているオブジェクトにのみ設定することもできます。
デフォルトのアクセス許可は、新しいオブジェクトにのみ適用されます。ALTER DEFAULT PRIVILEGES を実行しても、既存のオブジェクトのアクセス許可は変更されません。データベースまたはスキーマ内の任意のユーザーが作成した現在および将来のすべてのオブジェクトに対するアクセス許可を付与するには、「スコープ設定アクセス許可」を参照してください。
データベースユーザーのデフォルト権限に関する情報を表示するには、PG_DEFAULT_ACLシステムカタログテーブルをクエリします。
権限の詳細については、「GRANT」を参照してください。
必要な権限
ALTER DEFAULT PRIVILEGES 必要な権限は以下のとおりです。
スーパーユーザー
ALTER DEFAULT PRIVILEGES の権限を持つユーザー
自身のデフォルトのアクセス権限を変更しているユーザー
自身がアクセス権限を持つスキーマの権限を設定しているユーザー
構文
ALTER DEFAULT PRIVILEGES [ FOR USER target_user [, ...] ] [ IN SCHEMA schema_name [, ...] ] grant_or_revoke_clause where grant_or_revoke_clause is one of: GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] } ON TABLES TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON PROCEDURES TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...] REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] } ON TABLES FROM user_name [, ...] [ RESTRICT ] REVOKE { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] } ON TABLES FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ] REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS FROM user_name [, ...] [ RESTRICT ] REVOKE { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ] REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON PROCEDURES FROM user_name [, ...] [ RESTRICT ] REVOKE { EXECUTE | ALL [ PRIVILEGES ] } ON PROCEDURES FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]
パラメータ
- FOR USER target_user
-
省略可能。デフォルト権限が定義されているユーザーの名前。他のユーザーに対しては、スーパーユーザーのみがデフォルト権限を指定できます。デフォルト値は現在のユーザーです。
- IN SCHEMA schema_name
-
省略可能。IN SCHEMA 句が表示されている場合、指定したデフォルト権限は、指定の schema_name で作成された新しいオブジェクトに適用されます。この場合、ALTER DEFAULT PRIVILEGES のターゲットであるユーザーまたはユーザーグループは、指定されたスキーマに対する CREATE権限が必要です。スキーマ固有のデフォルト権限は、既存のグローバルなデフォルト権限に追加されます。デフォルトでは、デフォルト権限はデータベース全体にグローバルに適用されます。
- GRANT
-
指定したユーザーが作成するすべての新しいテーブルとビュー、関数、またはストアドプロシージャについて、指定したユーザーやグループに付与する権限のセット。GRANT 句では、GRANTコマンドと同じ権限とオプションを設定できます。
- WITH GRANT OPTION
-
権限を付与されるユーザーが、他のユーザーにも同じ権限を付与できることを示します。WITH GRANT OPTION をグループまたは PUBLIC に付与することはできません。
- TO user_name | ROLE role_name | GROUP group_name
-
指定したデフォルト権限が適用されるユーザー、ロール、またはユーザーグループの名前。
- REVOKE
-
指定したユーザーが作成するすべての新しいテーブル、関数、またはストアドプロシージャについて、指定したユーザーやグループから取り消す権限のセット。REVOKE 句では、REVOKEコマンドと同じ権限とオプションを設定できます。
- GRANT OPTION FOR
-
他のユーザーに特定の権限を付与するオプションのみを取り消し、権限自体は取り消しません。グループや PUBLIC の GRANT OPTION を取り消すことはできません。
- FROM user_name | ROLE role_name | GROUP group_name
-
指定した権限をデフォルトで取り消すユーザー、ロール、またはユーザーグループの名前。
- RESTRICT
-
RESTRICT オプションは、ユーザーが直接付与した権限のみを取り消します。これがデフォルトです。
例
ユーザーグループ report_readers
に属する任意のユーザーに対して、ユーザー report_admin
が作成したすべてのテーブルとビューを表示することを許可するとします。この場合は、スーパーユーザーとして次のコマンドを実行します。
alter default privileges for user report_admin grant select on tables to group report_readers;
次の例では、最初のコマンドにより、作成するすべての新しいテーブルとビューに対して SELECT 権限が付与されます。
alter default privileges grant select on tables to public;
次の例では、sales_admin
スキーマで作成するすべての新しいテーブルとビューに対して、sales
ユーザーグループに INSERT 権限が付与されます。
alter default privileges in schema sales grant insert on tables to group sales_admin;
次の例では、前の例とは逆に ALTER DEFAULT PRIVILEGES コマンドで権限を取り消します。
alter default privileges in schema sales revoke insert on tables from group sales_admin;
デフォルトでは、PUBLIC ユーザーグループはすべての新しいユーザー定義関数に対する実行許可を付与されます。新しい関数に対する public
の実行許可を取り消して、dev_test
ユーザーグループにのみ実行許可を付与するには、次のコマンドを実行します。
alter default privileges revoke execute on functions from public; alter default privileges grant execute on functions to group dev_test;