Amazon Redshift
数据库开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

GRANT

为用户或用户组定义访问权限。

权限包括各种访问选项,例如读取表和视图中的数据、写入数据和创建表的能力。使用此命令可以授予对表、数据库、schema 或函数的特定权限。要撤消对数据库对象的权限,请使用 REVOKE 命令。

您无法授予或撤销对外部表的权限。相反,您可以授予或撤销对外部 schema 的权限。

对于存储过程,唯一可以授予的权限是 EXECUTE。

语法

GRANT { { SELECT | INSERT | UPDATE | DELETE | REFERENCES } [,...] | ALL [ PRIVILEGES ] } ON { [ TABLE ] table_name [, ...] | ALL TABLES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] } ON DATABASE db_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] } ON SCHEMA schema_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { FUNCTION function_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL FUNCTIONS IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON { PROCEDURE procedure_name ( [ [ argname ] argtype [, ...] ] ) [, ...] | ALL PROCEDURES IN SCHEMA schema_name [, ...] } TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT USAGE ON LANGUAGE language_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

参数

SELECT

授予使用 SELECT 语句从表或视图中选择数据的权限。对于 UPDATE 或 DELETE 操作,也需要 SELECT 权限来引用现有的列值。

INSERT

授予用于通过 INSERT 语句或 COPY 语句将数据加载到表中的权限。

UPDATE

授予用于通过 UPDATE 语句更新表列的权限。UPDATE 操作也需要 SELECT 权限,因为这些操作必须引用表列才能确定要更新哪些行或者计算列的新值。

DELETE

授予用于从表中删除数据行的权限。DELETE 操作也需要 SELECT 权限,因为这些操作必须引用表列才能确定要删除哪些行。

REFERENCES

授予用于创建外键约束的权限。您必须授予对被引用表和引用表的此权限;否则,用户将无法创建约束。

ALL [ PRIVILEGES ]

一次性向指定的用户或用户组授予所有可用权限。PRIVILEGES 关键字是可选的。

GRANT ALL ON SCHEMA 不会授予对外部 schema 的 CREATE 权限。

ON [ TABLE ] table_name

授予对表或视图的指定权限。TABLE 关键字是可选的。您可以在一个语句中列出多个表和视图。

ON ALL TABLES IN SCHEMA schema_name

授予对被引用 schema 中的所有表和视图的指定权限。

TO username

指示接收权限的用户。

WITH GRANT OPTION

指示接收权限的用户又可以将相同权限授予其他用户。您无法将 WITH GRANT OPTION 授予组或 PUBLIC。

GROUP group_name

向用户组授予权限。

PUBLIC

向所有用户授予指定的权限,包括以后创建的用户。PUBLIC 表示一个始终包含所有用户的组。单个用户的权限包含向 PUBLIC 授予的权限、向用户所属的所有组授予的权限以及向用户单独授予的任何权限。

CREATE

根据数据库对象,向用户或用户组授予以下权限:

  • 对于数据库,CREATE 允许用户在数据库中创建 schemas。

  • 对于 schema,CREATE 允许用户在 schema 中创建对象。要重命名对象,用户必须具有 CREATE 权限并拥有要重命名的对象。

  • Amazon Redshift Spectrum 外部 schema 不支持 CREATE ON SCHEMA。要授予在外部 schema 中使用外部表的权限,请向需要访问权限的用户授予 USAGE ON SCHEMA。仅允许外部 schema 的所有者或超级用户在外部 schema 中创建外部表。要移交外部 schema 的所有权,请使用 ALTER SCHEMA 更改所有者。

TEMPORARY | TEMP

授予用于在指定的数据库中创建临时表的权限。要运行 Amazon Redshift Spectrum 查询,数据库用户必须有权在数据库中创建临时表。

注意

默认情况下,向用户授予权限以通过其在 PUBLIC 组中自动获得的成员资格来创建临时表。要为任何用户删除用于创建临时表的权限,请撤消 PUBLIC 组的 TEMP 权限,然后明确向特定用户或用户组授予用于创建临时表的权限。

ON DATABASE db_name

授予对数据库的指定权限。

USAGE

授予对特定 schema 的 USAGE 权限,这将使用户能够访问该 schema 中的对象。必须单独授予对这些对象执行特定操作的权限(例如,对表的 SELECT 或 UPDATE 权限)。默认情况下,所有用户都对 PUBLIC schema 具有 CREATE 和 USAGE 权限。

ON SCHEMA schema_name

授予对 schema 的指定权限。

Amazon Redshift Spectrum 外部 schema 不支持 GRANT ALL ON SCHEMA 中的 GRANT CREATE ON SCHEMA 和 CREATE 权限。要授予在外部 schema 中使用外部表的权限,请向需要访问权限的用户授予 USAGE ON SCHEMA。仅允许外部 schema 的所有者或超级用户在外部 schema 中创建外部表。要移交外部 schema 的所有权,请使用 ALTER SCHEMA 更改所有者。

EXECUTE ON FUNCTION function_name

授予对特定函数的 EXECUTE 权限.由于函数名可重载,因此您必须包含函数的参数列表。有关更多信息,请参阅对 UDF 命名

EXECUTE ON ALL FUNCTIONS IN SCHEMA schema_name

授予对被引用 schema 中的所有函数的指定权限。

EXECUTE ON PROCEDURE procedure_name

授予对特定存储过程的 EXECUTE 权限。由于存储过程名称可重载,因此您必须包含过程的参数列表。有关更多信息,请参阅命名存储过程

EXECUTE ON ALL PROCEDURES IN SCHEMA schema_name

授予对被引用 schema 中的所有存储过程的指定权限。

USAGE ON LANGUAGE language_name

授予对语言的 USAGE 权限。

需要 USAGE ON LANGUAGE 权限才能运行 CREATE FUNCTION 命令来创建用户定义函数 (UDF)。有关更多信息,请参阅UDF 安全性和权限

需要 USAGE ON LANGUAGE 权限才能通过运行 CREATE PROCEDURE 命令来创建存储过程。有关更多信息,请参阅存储过程的安全性和权限

对于 Python UDF,使用 plpythonu。对于 SQL UDF,使用 sql。对于存储过程,请使用 plpgsql

使用说明

要授予关于对象的权限,您必须满足以下条件之一:

  • 是对象所有者。

  • 是超级用户。

  • 拥有该对象和权限的授予权限。

例如,以下命令使用户 HR 能够对 employees 表执行 SELECT 命令并对其他用户授予和撤销相同的权限。

grant select on table employees to HR with grant option;

HR 无法授予 SELECT 之外的任何操作的权限或 employees 表之外的任何其他表的权限。

获得视图的权限并不意味着对基础表具有权限。同样,获得 schema 的权限并不意味着对该 schema 中的表具有权限。您需要显式授予对基础表的访问权限。

超级用户可以访问所有对象,不管设置对象权限的 GRANT 和 REVOKE 命令如何。

示例

以下示例向用户 fred 授予对 SALES 表的 SELECT 权限。

grant select on table sales to fred;

以下示例向用户 fred 授予对 QA_TICKIT schema 中所有表的 SELECT 权限。

grant select on all tables in schema qa_tickit to fred;

以下示例向用户组 QA_USERS 授予对 schema QA_TICKIT 的全部 schema 权限。Schema 权限包括 CREATE 和 USAGE。USAGE 向用户授予访问 schema 中对象的权限,但不授予对这些对象的 INSERT 或 SELECT 之类的权限。必须单独授予关于每个对象的权限。

create group qa_users; grant all on schema qa_tickit to group qa_users;

以下示例向组 QA_USERS 中的所有用户授予对 QA_TICKIT schema 中的 SALES 表的所有权限。

grant all on table qa_tickit.sales to group qa_users;

以下命令序列说明,具有对 schema 的访问权限并不表示授予对 schema 中的表的权限。

create user schema_user in group qa_users password 'Abcd1234'; create schema qa_tickit; create table qa_tickit.test (col1 int); grant all on schema qa_tickit to schema_user; set session authorization schema_user; select current_user; current_user -------------- schema_user (1 row) select count(*) from qa_tickit.test; ERROR: permission denied for relation test [SQL State=42501] set session authorization dw_user; grant select on table qa_tickit.test to schema_user; set session authorization schema_user; select count(*) from qa_tickit.test; count ------- 0 (1 row)

以下命令序列说明,具有对视图的访问权限并不意味着具有对基础表的访问权限。虽然名为 VIEW_USER 的用户已被授予 VIEW_DATE 的所有权限,但该用户无法从 DATE 表中选择数据。

create user view_user password 'Abcd1234'; create view view_date as select * from date; grant all on view_date to view_user; set session authorization view_user; select current_user; current_user -------------- view_user (1 row) select count(*) from view_date; count ------- 365 (1 row) select count(*) from date; ERROR: permission denied for relation date

本页内容: