GRANT - Amazon Redshift
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

GRANT

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

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

权限还包括各种访问选项,例如将对象或使用者添加到数据共享或从数据共享中删除对象或使用者的能力。要向用户或用户组的数据共享中添加数据库对象或从中删除数据库对象,请使用 ALTER 权限。同样,要从数据共享中添加或删除使用者,请使用 SHARE 权限。要撤消对数据库对象的权限,请使用 REVOKE 命令。ALTER 和 SHARE 是您可以授予用户和用户组的唯一权限。

您只能将对于外部架构的 GRANT 或 REVOKE USAGE 权限授予使用 ON SCHEMA 语法的数据库用户和用户组。将 ON EXTERNAL SCHEMA 与 Amazon Lake Formation 搭配使用时,您只能向 Amazon Identity and Access Management (IAM) 角色授予 GRANT 和 REVOKE 权限。有关权限的列表,请参阅语法。

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

您不能在以下事务数据块内的(外部资源)上运行 GRANT:((BEGIN ... END)。有关事务的更多信息,请参阅 可序列化的隔离

Syntax

GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | 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 } [, ...]

以下是 Amazon Redshift 表和视图上的列级权限的语法。

GRANT { { SELECT | UPDATE } ( column_name [, ...] ) [, ...] | ALL [ PRIVILEGES ] ( column_name [,...] ) } ON { [ TABLE ] table_name [, ...] } TO { username | GROUP group_name | PUBLIC } [, ...]

以下是授予具有指定角色的用户和组的 ASSUMEROLE 权限的语法。要开始使用 ASSUMEROLE 权限,请参阅有关授予 ASSUMEROLE 权限的使用说明

GRANT ASSUMEROLE ON { 'iam_role' [, ...] | ALL } TO { username | GROUP group_name | PUBLIC } [, ...] FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]

以下是 Redshift Spectrum 与 Lake Formation 集成的语法。

GRANT { SELECT | ALL [ PRIVILEGES ] } ( column_list ) ON EXTERNAL TABLE schema_name.table_name TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ] GRANT { { SELECT | ALTER | DROP | DELETE | INSERT } [, ...] | ALL [ PRIVILEGES ] } ON EXTERNAL TABLE schema_name.table_name [, ...] TO { { IAM_ROLE iam_role } [, ...] | PUBLIC } [ WITH GRANT OPTION ] GRANT { { CREATE | ALTER | DROP } [, ...] | ALL [ PRIVILEGES ] } ON EXTERNAL SCHEMA schema_name [, ...] TO { IAM_ROLE iam_role } [, ...] [ WITH GRANT OPTION ]

以下是使用 GRAN 获取 Amazon Redshift 上的数据共享权限的语法。在此情况下,ALTER 和 SHARE 是您可以授予用户和用户组的唯一权限。

GRANT { ALTER | SHARE } ON DATASHARE datashare_name TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

以下是使用 GRAN 获取 Amazon Redshift 上的数据共享使用权限的语法。您可以使用 USAGE 权限向使用者授予对数据共享的访问权限。您不能将此权限授予给用户或用户组。此权限也不支持 GRANT 语句的 WITH GRANT OPTION。只有具有先前针对数据共享授予他们的权限的用户或用户组才能运行此类型的 GRANT 语句。

GRANT USAGE ON DATASHARE datashare_name TO NAMESPACE 'namespaceGUID' [, ...] | ACCOUNT 'accountnumber' [, ...]

以下是根据数据共享创建的特定数据库或 schema 的 GRANT 数据共享使用权限的语法。此 USAGE 权限不会将使用权限授予不是从指定数据共享创建的数据库。您只能将针对数据共享的权限 GRANT 或 REVOKE ALTER 或 SHARE 给用户和用户组。

GRANT USAGE ON { DATABASE shared_database_name [, ...] | SCHEMA shared_schema} TO { username | GROUP group_name | PUBLIC } [, ...]

以下是 Amazon Redshift 上的机器学习模型权限的语法。

GRANT CREATE MODEL TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...] GRANT { EXECUTE | ALL [ PRIVILEGES ] } ON MODEL model_name [, ...] TO { username [ WITH GRANT OPTION ] | GROUP group_name | PUBLIC } [, ...]

Parameters

SELECT

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

INSERT

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

UPDATE

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

DELETE

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

REFERENCES

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

ALL [ PRIVILEGES ]

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

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

您可以针对为 Lake Formation 启用的 Amazon Glue Data Catalog 中的表授予 ALL 权限。在这种情况下,各个权限(如 SELECT、ALTER 等)将记录在 Data Catalog 中。

ALTER

授予更改为 Lake Formation 启用的 Amazon Glue Data Catalog 中的表的权限。此权限仅在使用 Lake Formation 时适用。

DROP

授予删除表的权限。此权限适用于 Amazon Redshift 和为 Lake Formation 启用的 Amazon Glue Data Catalog 中。

ASSUMEROLE

向具有指定角色的用户和组授予运行 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 命令的权限。用户或组在运行指定命令时担任该角色。要开始使用 ASSUMEROLE 权限,请参阅有关授予 ASSUMEROLE 权限的使用说明

ON [ TABLE ] table_name

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

ON ALL TABLES IN SCHEMA schema_name

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

( column_name [,...] ) ON TABLE table_name

向用户、组或 PUBLIC 授予对 Amazon Redshift 表或视图的指定列的指定权限。

( column_list ) ON EXTERNAL TABLE schema_name.table_name

将针对引用架构中 Lake Formation 表的指定列的指定权限授予 IAM 角色。

ON EXTERNAL TABLE schema_name.table_name

将针对引用架构中指定的 Lake Formation 表的指定权限授予 IAM 角色。

ON EXTERNAL SCHEMA schema_name

将针对引用架构的指定权限授予 IAM 角色。

ON iam_role

将指定权限授予 IAM 角色。

TO username

指示接收权限的用户。

TO IAM_ROLE iam_role

指示接收权限的 IAM 角色。

WITH GRANT OPTION

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

GROUP group_name

向用户组授予权限。

PUBLIC

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

授予对 Lake Formation EXTERNAL TABLE 的 PUBLIC 权限会将该权限授予 Lake Formation 所有人组。

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

FOR { ALL | COPY | UNLOAD | EXTERNAL FUNCTION | CREATE MODEL } [, ...]

指定被授予权限的 SQL 命令。您可以指定 ALL 以授予对 COPY、UNLOAD、EXTERNAL FUNCTION 和 CREATE MODEL 语句的权限。此子句仅适用于授予 ASSUMEROLE 权限。

ALTER

向用户授予 ALTER 权限,以便将对象添加到数据共享中或从中删除,或设置属性 PUBLICACCESSIBLE。有关更多信息,请参阅ALTER DATASHARE

SHARE

向用户和用户组授予将数据使用者添加到数据共享的权限。要使特定使用者(账户或命名空间)能够从其集群访问数据,需要此权限。使用者可以相同或不同的 Amazon 账户,集群命名空间与全局唯一标识符 (GUID) 指定的集群命名空间相同或不同。

ON DATASHARE datashare_name

授予对被引用数据共享的指定权限。

USAGE

将 USAGE 授予同一账户中的使用者账户或命名空间时,该账户中的特定使用者账户或命名空间可以以只读方式访问数据共享和数据共享的对象。

TO NAMESPACE 'clusternamespace GUID'

指示同一账户给中的一个命名空间,使用者可以在其中接收对数据共享的指定权限。命名空间使用 128 位的字符数字 GUID。

TO ACCOUNT 'accountnumber'

指示使用者可以在其中接收对数据共享的指定权限的另一个账户的编号。

ON DATABASE shared_database_name> [, ...]

授予对在指定数据共享中创建的指定数据库的指定使用权限。

ON SCHEMA shared_schema

授予对在指定数据共享中创建的指定 schema 的指定权限。

CREATE MODEL

向特定用户或用户组授予 CREATE MODEL 权限。

ON MODEL model_name

授予对特定模型的 EXECUTE 权限。