

 从补丁 198 开始，Amazon Redshift 将不再支持创建新的 Python UDF。现有的 Python UDF 将继续正常运行至 2026 年 6 月 30 日。有关更多信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/big-data/amazon-redshift-python-user-defined-functions-will-reach-end-of-support-after-june-30-2026/)。

# 使用数据库角色权限访问 Amazon Redshift Serverless 数据库对象
<a name="serverless-iam-credentials-use-case"></a>

此过程说明如何通过 [Amazon Redshift 数据库角色](https://docs.amazonaws.cn/redshift/latest/dg/t_Roles.html)授予查询表的权限。通过标签分配角色，该标签在 IAM 中附加到用户，并在用户登录时传递给 Amazon Redshift。这是以[在 Amazon Redshift Serverless 中定义向联合用户授予的数据库角色](https://docs.amazonaws.cn/redshift/latest/mgmt/redshift-iam-access-federated-db-roles.html)中的概念举例的说明。完成这些步骤的好处是，您可以将用户与数据库角色相关联，并避免为每个数据库对象设置权限。它简化了对用户查询、修改数据或向表中添加数据以及执行其他操作的能力的管理。

该过程假设您已经设置了 Amazon Redshift Serverless 数据库，并且能够在该数据库中授予权限。它还假设您有权在 Amazon 控制台中创建 IAM 用户，以及创建 IAM 角色和分配策略权限。

1. 使用 IAM 控制台创建 IAM 用户。稍后，您将使用此用户连接到数据库。

1. 使用查询编辑器 v2 或其他 SQL 客户端，创建 Redshift 数据库角色。有关创建数据库角色的更多信息，请参阅创建 [CREATE ROLE](https://docs.amazonaws.cn/redshift/latest/dg/r_CREATE_ROLE.html)。

   ```
   CREATE ROLE urban_planning;
   ```

   查询 [SVV\_ROLES](https://docs.amazonaws.cn/redshift/latest/dg/r_SVV_ROLES.html) 系统视图，以检查您的角色是否已创建。它还会返回系统角色。

   ```
   SELECT * from SVV_ROLES;
   ```

1. 授予您创建的数据库角色从表中进行选择的权限。（您创建的 IAM 用户最后将登录并通过数据库角色从表中选择记录。） 以下代码示例中的角色名和表名是示例。在此，授予了从名为 `cities` 的表中进行选择的权限。

   ```
   GRANT SELECT on TABLE cities to ROLE urban_planning;
   ```

1. 使用 Amazon Identity and Access Management 控制台创建 IAM 角色。此角色授予使用查询编辑器 v2 的权限。创建新的 IAM 角色，对于可信实体类型，选择 **Amazon 账户**。然后选择**此账户**。为角色授予以下策略权限：
   + `AmazonRedshiftReadOnlyAccess`
   + `tag:GetResources`
   + `tag:GetTagKeys`
   + sqlworkbench 的所有操作，包括 `sqlworkbench:ListDatabases` 和 `sqlworkbench:UpdateConnection`。

1. 在 IAM 控制台中，将一个带有**键** `RedshiftDbRoles` 的标签添加到您之前创建的 IAM 用户。标签的值应与您在第一步中创建的数据库角色相匹配。它在此示例中为 `urban_planning`。

完成这些步骤后，将 IAM 角色分配给您在 IAM 控制台中创建的用户。当用户使用查询编辑器 v2 登录数据库时，用户在标签中的数据库角色名称将传递给 Amazon Redshift 并与用户关联。因此，用户可以通过数据库角色查询相应的表。举例来说，此示例中的用户可以通过 `urban_planning` 数据库角色查询 `cities` 表。