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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

使用说明

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

  • 是对象所有者。

  • 是超级用户。

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

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

grant select on table employees to HR with grant option;

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

再例如,以下命令允许用户 HR 对 employees 表执行 ALTER 命令并对其他用户授予和撤消相同的权限。

grant ALTER on datashare employees to HR with grant option;

HR 无法授予对 ALTER 之外的任何操作的权限或对 employees 之外的任何其他数据共享的权限。

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

要授予针对 AWS Lake Formation 表的权限,与表的外部架构关联的 IAM 角色必须有权授予对外部表的权限。以下示例创建具有关联的 IAM 角色 myGrantor 的外部架构。 IAM 角色 myGrantor 有权向其他人授予权限。GRANT 命令使用与外部架构关联的 IAM 角色 myGrantor 的权限来向 IAM 角色 myGrantee. 授予权限。

create external schema mySchema from data catalog database 'spectrum_db' iam_role 'arn:aws:iam::123456789012:role/myGrantor' create external database if not exists;
grant select on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';

如果您将 GRANT ALL 权限授予 IAM 角色,则会在启用 Lake Formation 的相关 – 中授予各项权限。Data Catalog例如,以下 GRANT ALL 会导致在 Lake Formation 控制台中显示授予的各个权限(SELECT、ALTER、DROP、DELETE 和 INSERT)。

grant all on external table mySchema.mytable to iam_role 'arn:aws:iam::123456789012:role/myGrantee';

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

列级访问控制的使用说明

以下使用说明适用于 Amazon Redshift 表和视图上的列级权限。这些说明描述了表;除非我们明确指出例外,否则相同的说明适用于视图。

对于 Amazon Redshift 表,您只能在列级别授予 SELECT 和 UPDATE 权限。对于 Amazon Redshift 视图,您只能在列级别授予 SELECT 权限。

ALL 关键字是在表上列级 GRANT 的上下文中使用时组合的 SELECT 和 UPDATE 权限的同义词。

如果对表中的所有列没有 SELECT 权限,则对所有列执行 SELECT 操作 (SELECT *) 将失败。

如果对表或视图具有 SELECT 或 UPDATE 权限并添加一列,则您对表或视图及其所有列仍具有相同的权限。

只有表的拥有者或超级用户才能授予列级权限。

列级权限不支持 WITH GRANT OPTION 子句。

您不能同时在表级别和列级别保持相同的权限。例如,用户 data_scientist 不能同时对表 employee 具有 SELECT 权限,也不能对列 employee.department 具有 SELECT 权限。 在授予对表和表中的列的相同权限时,请考虑以下结果:

  • 如果用户对表具有表级权限,则在列级别授予相同权限不起作用。

  • 如果用户对表具有表级权限,则撤消表中一个或多个列的相同权限将返回错误。而应撤消表级别的权限。

  • 如果用户具有列级权限,则在表级别授予相同权限将返回错误。

  • 如果用户具有列级权限,则在表级别撤消相同的权限将撤消对表上所有列的列和表权限。

您不能为后期绑定视图授予列级权限。

要创建具体化视图,您必须对基表具有表级 SELECT 权限。即使您对特定列具有列级权限,也无法仅在这些列上创建具体化视图。但是,您可以授予对于具体化视图(类似于常规视图)的列的 SELECT 权限。

要查找列级别权限的授予,请使用 PG_ATTRIBUTE_INFO 视图。

授予 ASUMEROLE 权限的使用说明

以下使用说明适用于在 Amazon Redshift 中授予 ASUMEROLE 权限。

您可以使用 ASUMEROLE 权限来控制 COPY 和 UNLOAD 等命令上的数据库用户和组的 IAM 角色访问权限。在您将 ASUMEROLE 权限授予 IAM 角色上的用户或组后,用户或组可以在运行命令时代入该角色。这使您能够根据需要授予对适当命令的访问权限。

只有数据库超级用户才能授予或撤消用户和组的 ASUMEROLE 权限。超级用户始终保留 ASUMEROLE 权限。

为支持对用户和组使用 ASUMEROLE 权限,超级用户在集群上运行一次以下语句。超级用户必须先在集群上运行一次以下语句,然后才能向用户和组授予 ASUMEROLE 权限。

revoke assumerole on all from public for all;

在授予 ASUMEROLE 权限时,您可以在 ON 子句中指定角色链。您可以使用逗号在角色链中分隔角色,例如,Role1,Role2,Role3。 如果在授予 ASUMEROLE 权限时指定了角色链,则必须在执行由 ASUMEROLE 权限授予的操作时指定角色链。在执行由 ASUMEROLE 权限授予的操作时,您无法指定角色链中的各个角色。例如,如果向用户或组授予了角色链 Role1,Role2,Role3,则您不能仅指定 Role1 来执行 操作。

如果用户尝试执行 COPY 或 UNLOAD 操作,但尚未获得 ASSUMEROLE 权限,则会显示类似于以下内容的消息。

ERROR: User awsuser does not have ASSUMEROLE permission on IAM role "arn:aws:iam::123456789012:role/RoleA" for COPY

要列出已通过 ASUMEROLE 权限授予对 IAM 角色和命令的访问权限的用户,请参阅不具有角色的 HAS_ASSUMEROLE_PRIVILEGE。要列出已向您指定的用户授予的 IAM 角色和命令权限,请参阅PG_GET_IAM_ROLE_BY_USER。要列出有权访问您指定的 IAM 角色的用户和组,请参阅PG_GET_GRANTEE_BY_IAM_ROLE