

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

# 设置 Amazon Redshift 数据共享权限
<a name="setup-ds-perms"></a>

 本主题介绍接受数据共享邀请、创建联合数据库和授予权限所需执行的步骤。您可以使用 Lake Formation 控制台或 AWS Command Line Interface (AWS CLI)。本主题中的示例显示了同一个账户中的制作者集群、数据目录和数据使用者。

要了解有关 Lake Formation 跨账户功能的更多信息，请参阅[Lake Formation 中的跨账户数据共享](cross-account-permissions.md)。

**设置数据共享权限**

1. 查看数据共享邀请并接受。

------
#### [ Console ]

   1.  通过 [https://console.aws.amazon.com/lakeformation/](https://console.aws.amazon.com/lakeformation/) 以数据湖管理员的身份登录 Lake Formation 控制台。导航到**数据共享**页面。

   1. 查看已授权您访问的数据共享。**状态**列表示您当前参与数据共享的状态。**待处理**状态表示您已被添加到数据共享，但尚未接受或已拒绝邀请。

   1.  要响应数据共享邀请，请选择数据共享名称，然后选择**查看邀请**。在**接受或拒绝数据共享**中，查看邀请详细信息。选择**接受**接受邀请，或选择**拒绝**拒绝邀请。如果您拒绝邀请，就无法访问数据共享。

------
#### [ AWS CLI ]

   以下示例显示如何查看、接受和注册邀请。将 AWS 账户 ID 替换为有效的 AWS 账户 ID。将 `data-share-arn` 替换为引用数据共享的实际 Amazon 资源名称 (ARN)。

   1. 查看待处理的邀请。

      ```
      aws redshift describe-data-shares \
       --data-share-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds' \
      ```

   1. 接受数据共享。

      ```
       aws redshift associate-data-share-consumer \
       --data-share-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds' \
       --consumer-arn 'arn:aws:glue:us-east-1:111122223333:catalog
      ```

   1. 在 Lake Formation 账户中注册数据共享。使用 [RegisterResource](https://docs.aws.amazon.com/lake-formation/latest/APIReference/API_RegisterResource.html) API 操作在 Lake Formation 中注册数据共享。`DataShareArn` 是 `ResourceArn` 的输入参数。
**注意**  
此步骤为必需步骤。

      ```
      aws lakeformation register-resource \
       --resource-arn 'arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds'
      ```

------

1. 创建数据库。

    接受数据共享邀请后，您需要创建一个指向与数据共享关联的 Amazon Redshift 数据库的数据库。您必须是数据湖管理员才能创建数据库。

------
#### [ Console ]

   1.  从**邀请**窗格中选择数据共享，然后选择**设置数据库详细信息**。

   1.  在**设置数据库详细信息**中，输入数据共享的唯一名称和标识符。使用此标识符可在元数据层次结构（dbName.schema.table）中对数据共享进行内部映射。

   1.  选择**下一步**，向其他用户授予对共享数据库和表的权限。

------
#### [ AWS CLI ]

    在 AWS CLI 中使用以下示例代码创建指向与 Lake Formation 共享的 Amazon Redshift 数据库的数据库。

   ```
   aws glue create-database --cli-input-json \
   
   '{
    "CatalogId": "111122223333",
    "DatabaseInput": {
     "Name": "tahoedb",
     "FederatedDatabase": {
          "Identifier": "arn:aws:redshift:us-east-1:111122223333:datashare:abcd1234-1234-ab12-cd34-1a2b3c4d5e6f/federatedds",
          "ConnectionName": "aws:redshift"
      }
    }
    }'
   ```

------

1. 授予权限

    创建数据库后，可以向账户中的用户或外部 AWS 账户和组织授予权限。您将无法针对映射到 Amazon Redshift 数据共享的联合数据库授予写入数据权限（插入、删除）和元数据权限（更改、删除、创建）。有关授予权限的更多信息，请参阅[管理 Lake Formation 权限](managing-permissions.md)。
**注意**  
作为数据湖管理员，您只能查看联合数据库中的表。要执行任何其它操作，您都需要授予自己对这些表的更多权限。

------
#### [ Console ]

   1. 在**授予权限**屏幕上，选择要向其授予权限的用户。

   1. 选择**授权**。

------
#### [ AWS CLI ]

   在 AWS CLI 中使用以下示例通过以下方式授予数据库和表权限：

   ```
   aws lakeformation grant-permissions --input-cli-json file://input.json
   
   {
      "Principal": {
              "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/non-admin"
      },
      "Resource": {
             "Database": {
                   "CatalogId": "111122223333",
                    "Name": "tahoedb"
              }
       },
       "Permissions": [
                "DESCRIBE"
        ],
       "PermissionsWithGrantOption": [
                            
        ]
    }
   ```

   ```
   aws lakeformation grant-permissions --input-cli-json file://input.json
   
   {
                      "Principal": {
                             "DataLakePrincipalIdentifier": "arn:aws:iam::111122223333:user/non-admin"
                      },
                     "Resource": {
                            "Table": {
                                 "CatalogId": "111122223333",
                                 "DatabaseName": "tahoedb",
                                 "Name": "public.customer"
                          }
                     },
                    "Permissions": [
                           "SELECT"
                     ],
                    "PermissionsWithGrantOption": [
                            "SELECT"
                      ]
    }
   ```

------