对角色和用户进行授权操作。
使用GRANT命令进行用户授权包括以下三种场景:
-
将系统权限授权给角色或用户
系统权限又称为用户属性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN和LOGIN。
-
将数据库对象授权给角色或用户
将数据库对象(表和视图、指定字段、数据库、函数、模式、表空间等)的相关权限授予特定角色或用户;
-
将角色或用户的权限授权给其他角色或用户
将一个角色或用户的权限授予一个或多个其他角色或用户。在这种情况下,每个角色或用户都可视为拥有一个或多个数据库权限的集合。
语法格式
-
将表或视图的访问权限赋予指定的用户或角色。
``` GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES } [, ...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
```
-
将表中字段的访问权限赋予指定的用户或角色。
GRANT { {{ SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )} [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) } ON [ TABLE ] table_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; -
将数据库的访问权限赋予指定的用户或角色。
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] } ON DATABASE database_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; -
将域的访问权限赋予指定的用户或角色。
GRANT { USAGE | ALL [ PRIVILEGES ] } ON DOMAIN domain_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
说明:
本版本暂时不支持赋予域的访问权限。 -
将外部数据源的访问权限赋予给指定的用户或角色。
GRANT { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN DATA WRAPPER fdw_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; -
将外部服务器的访问权限赋予给指定的用户或角色。
GRANT { USAGE | ALL [ PRIVILEGES ] } ON FOREIGN SERVER server_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; -
将函数的访问权限赋予给指定的用户或角色。
GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; -
将过程语言的访问权限赋予给指定的用户或角色。
GRANT { USAGE | ALL [ PRIVILEGES ] } ON LANGUAGE lang_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
说明:
本版本只有C函数支持所有用户创建,而Java和Internal只支持拥有sysadmin权限的用户创建。
- 拥有sysadmin权限的用户通过grant语法来将创建C函数的权限授权给普通用户时,不支持grant usage on language c to public,只支持授权给特定用户。
- 拥有sysadmin权限的用户通过grant语法来将创建C函数的权限授权给普通用户时,不支持with grant option。 -
将大对象的访问权限赋予指定的用户或角色。
GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] } ON LARGE OBJECT loid [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
说明:
本版本暂时不支持大对象。 -
将子openGauss的访问权限赋予指定的用户或角色。
GRANT { CREATE | USAGE | COMPUTE | ALL [ PRIVILEGES ] } ON NODE GROUP group_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; -
将模式的访问权限赋予指定的用户或角色。
GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
说明:
将模式中的表或者视图对象授权给其他用户时,需要将表或视图所属的模式的USAGE权限同时授予该用户,若没有该权限,则只能看到这些对象的名字,并不能实际进行对象访问。 -
将表空间的访问权限赋予指定的用户或角色。
GRANT { CREATE | ALL [ PRIVILEGES ] } ON TABLESPACE tablespace_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ]; -
将类型的访问权限赋予指定的用户或角色。
GRANT { USAGE | ALL [ PRIVILEGES ] } ON TYPE type_name [, ...] TO { [ GROUP ] role_name | PUBLIC } [, ...] [ WITH GRANT OPTION ];
说明:
本版本暂时不支持赋予类型的访问权限。 -
将角色的权限赋予其他用户或角色的语法。
GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]; -
将sysadmin权限赋予指定的角色。
GRANT ALL { PRIVILEGES | PRIVILEGE } TO role_name; -
将Data Source对象的权限赋予指定的角色。
GRANT {USAGE | ALL [PRIVILEGES]} ON DATA SOURCE src_name [, ...] TO {[GROUP] role_name | PUBLIC} [, ...] [WITH GRANT OPTION]; -
将directory对象的权限赋予指定的角色。
GRANT {READ|WRITE| ALL [PRIVILEGES]} ON DIRECTORY directory_name [, ...] TO {[GROUP] role_name | PUBLIC} [, ...] [WITH GRANT OPTION];
示例
示例1:将系统权限授权给用户或者角色。
创建名为joe的用户,并将sysadmin权限授权给他。
postgres=# CREATE USER joe PASSWORD 'Bigdata123@';
postgres=# GRANT ALL PRIVILEGES TO joe;
授权成功后,用户joe会拥有sysadmin的所有权限。
示例2:将对象权限授权给用户或者角色。
-
撤销joe用户的sysadmin权限,然后将模式tpcds的使用权限和表tpcds.reason的所有权限授权给用户joe。
postgres=# REVOKE ALL PRIVILEGES FROM joe; postgres=# GRANT USAGE ON SCHEMA tpcds TO joe; postgres=# GRANT ALL PRIVILEGES ON tpcds.reason TO joe;授权成功后,joe用户就拥有了tpcds.reason表的所有权限,包括增删改查等权限。
-
将tpcds.reason表中r_reason_sk、r_reason_id、r_reason_desc列的查询权限,r_reason_desc的更新权限授权给joe。
postgres=# GRANT select (r_reason_sk,r_reason_id,r_reason_desc),update (r_reason_desc) ON tpcds.reason TO joe;授权成功后,用户joe对tpcds.reason表中r_reason_sk,r_reason_id的查询权限会立即生效。如果joe用户需要拥有将这些权限授权给其他用户的权限,可以通过以下语法对joe用户进行授权。
postgres=# GRANT select (r_reason_sk, r_reason_id) ON tpcds.reason TO joe WITH GRANT OPTION;将数据库postgres的连接权限授权给用户joe,并给予其在postgres中创建schema的权限,而且允许joe将此权限授权给其他用户。
postgres=# GRANT create,connect on database postgres TO joe WITH GRANT OPTION;创建角色tpcds_manager,将模式tpcds的访问权限授权给角色tpcds_manager,并授予该角色在tpcds下创建对象的权限,不允许该角色中的用户将权限授权给其他人。
CREATE ROLE tpcds_manager PASSWORD ''; GRANT USAGE,CREATE ON SCHEMA tpcds TO tpcds_manager;将表空间tpcds_tbspc的所有权限授权给用户joe,但用户joe无法将权限继续授予其他用户。
CREATE TABLESPACE tpcds_tbspc RELATIVE LOCATION 'tablespace/tablespace_1'; GRANT ALL ON TABLESPACE tpcds_tbspc TO joe;
示例3:将用户或者角色的权限授权给其他用户或角色。
-
创建角色manager,将joe的权限授权给manager,并允许该角色将权限授权给其他人。
CREATE ROLE manager PASSWORD ''; GRANT joe TO manager WITH ADMIN OPTION; -
创建用户senior_manager,将用户manager的权限授权给该用户。
CREATE ROLE senior_manager PASSWORD ''; GRANT manager TO senior_manager; -
撤销权限,并清理用户。
REVOKE manager FROM joe; REVOKE senior_manager FROM manager; DROP USER manager;
示例4:撤销上述授予的权限,并清理角色和用户。
REVOKE ALL PRIVILEGES ON reason FROM joe;
REVOKE ALL PRIVILEGES ON SCHEMA tpcds FROM joe;
REVOKE ALL ON TABLESPACE tpcds_tbspc FROM joe;
DROP TABLESPACE tpcds_tbspc;
REVOKE USAGE,CREATE ON SCHEMA tpcds FROM tpcds_manager;
DROP ROLE tpcds_manager;
DROP ROLE senior_manager;
DROP USER joe CASCADE;




