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

使用说明

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

  • 是对象所有者。

  • 是超级用户。

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

例如,以下命令使用户 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 中的表具有权限。而是显式授予对基础表的访问权限。

要授予针对 Amazon 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';

如果您向 IAM 角色授予 ALL 权限,则会在相关的启用了 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 视图。

有关授予 ASSUMEROLE 权限的使用说明

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

您可以使用 ASSUMEROLE 权限控制数据库用户和组对 COPY、UNLOAD、EXTERNAL FUNCTION 或 CREATE MODEL 等命令的 IAM 角色访问权限。向用户或组授予 IAM 角色的 ASSUMEROLE 权限后,该用户或组可以在运行命令时代入该角色。ASSUMEROLE 权限允许您根据需要授予对相应命令的访问权限。

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

要为用户和组启用 ASSUMEROLE 权限,超级用户要执行以下两项操作:

  • 在集群上运行以下语句一次:

    revoke assumerole on all from public for all;
  • 向用户和组授予相应命令的 ASSUMEROLE 权限。

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

如果用户尝试执行 COPY、UNLOAD、EXTERNAL FUNCTION 或 CREATE MODEL 操作,但尚未被授予 ASSUMEROLE 权限,则会显示类似于以下内容的消息。

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

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