更新时间:2022-07-29 GMT+08:00
ALTER DEFAULT PRIVILEGES
功能描述
设置应用于将来创建的对象的权限(这不会影响分配到已有对象中的权限)。为了权限的隔离,GaussDB(DWS)禁用了WITH GRANT OPTION语法。
注意事项
目前只支持表(包括视图)、序列、函数和类型(包括域)的权限更改。
语法格式
1 2 3 4 |
ALTER DEFAULT PRIVILEGES
[ FOR { ROLE | USER } target_role [, ...] ]
[ IN SCHEMA schema_name [, ...] ]
abbreviated_grant_or_revoke;
|
- 其中abbreviated_grant_or_revoke子句用于指定对哪些对象进行授权或回收权限。
1 2 3 4 5 6 7 8
grant_on_tables_clause | grant_on_functions_clause | grant_on_types_clause | grant_on_sequences_clause | revoke_on_tables_clause | revoke_on_functions_clause | revoke_on_types_clause | revoke_on_sequences_clause
- 其中grant_on_tables_clause子句用于对表授权。
1 2 3 4 5
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE } [, ...] | ALL [ PRIVILEGES ] } ON TABLES TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
- 其中grant_on_functions_clause子句用于对函数授权。
1 2 3 4
GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
- 其中grant_on_types_clause子句用于对类型授权。
1 2 3 4
GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPES TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
- 其中grant_on_sequences_clause子句用于对序列授权。
1 2 3 4 5
GRANT { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCES TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]
- 其中revoke_on_tables_clause子句用于回收表对象的权限。
1 2 3 4 5 6
REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ANALYZE | ANALYSE } [, ...] | ALL [ PRIVILEGES ] } ON TABLES FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]
- 其中revoke_on_functions_clause子句用于回收函数的权限。
1 2 3 4 5
REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] } ON FUNCTIONS FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]
- 其中revoke_on_types_clause子句用于回收类型的权限。
1 2 3 4 5
REVOKE [ GRANT OPTION FOR ] { USAGE | ALL [ PRIVILEGES ] } ON TYPES FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]
- 其中revoke_on_sequences_clause子句用于回收序列的权限。
1 2 3 4 5 6
REVOKE [ GRANT OPTION FOR ] { { USAGE | SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON SEQUENCES FROM { [ GROUP ] role_name | PUBLIC } [, ...] [ CASCADE | RESTRICT | CASCADE CONSTRAINTS ]
参数说明
- target_role
已有角色的名称。如果省略FOR ROLE/USER,则缺省值为当前角色/用户。
取值范围:已有角色的名称。
- schema_name
现有模式的名称。
target_role必须有schema_name的CREATE权限。
取值范围:现有模式的名称。
- role_name
被授予或者取消权限角色的名称。
取值范围:已存在的角色名称。
如果想删除一个被赋予了默认权限的角色,有必要恢复改变的缺省权限或者使用DROP OWNED BY来为角色脱离缺省的权限记录。
示例
- 将创建在模式tpcds里的所有表(和视图)的SELECT权限授予每一个用户:
1
ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds GRANT SELECT ON TABLES TO PUBLIC;
- 将tpcds下的所有表的插入权限授予用户jack:
1
ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds GRANT INSERT ON TABLES TO jack;
- 撤销上述权限:
1 2
ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds REVOKE SELECT ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES IN SCHEMA tpcds REVOKE INSERT ON TABLES FROM jack;
- 假设有两个用户test1、test2,如果想要test2用户对test1用户未来创建的表都有查询权限可以用如下操作:
- 首先,把test1的schema的权限赋权给test2用户:
1
grant usage, create on schema test1 to test2;
- 其次,把test1用户下的表的查询权限赋值给test2用户:
1
ALTER DEFAULT PRIVILEGES FOR USER test1 IN SCHEMA test1 GRANT SELECT ON tables TO test2;
- 然后,test1用户创建表:
1 2
set role test1 password 'password'; create table test3( a int, b int);
- 最后,用test2用户去查询:
1 2 3 4 5
set role test2 password 'password'; select * from test1.test3; a | b ---+--- (0 rows)
- 首先,把test1的schema的权限赋权给test2用户:
父主题: DCL语法