

 从补丁 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/)。

# 创建数据共享
<a name="datashare-creation"></a>

通过 Amazon Redshift，您可以使用数据共享跨 Amazon Redshift 集群或 Amazon 账户共享实时数据。数据共享是一个使用者-生产者对象，可让您与其它集群或 Amazon 账户共享 Amazon Redshift 集群中的实时数据。创建数据共享可实现安全的数据共享，同时保持对访问的控制并确保数据保持最新。以下各节将详细介绍如何创建数据共享和添加数据库对象（如架构、表和视图），以安全地共享实时数据。

## 创建数据共享
<a name="create-datashare-console"></a>

数据共享是数据库对象、权限和使用者的逻辑容器。使用者是您账户和其它 Amazon Web Services 账户中的 Amazon Redshift 预置集群或 Amazon Redshift Serverless 命名空间。每个数据共享都与在其中创建的数据库相关联，并且只能添加该数据库中的对象。作为生产者管理员，您可以按照以下过程之一，在控制台上和使用 SQL 创建数据共享。

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

在控制台上，您可以从集群或命名空间详细信息页面中的**数据共享**选项卡创建数据共享。创建数据共享后，您可以作为使用者管理员从使用者上的数据共享中创建数据库。

1. 登录到 Amazon Web Services 管理控制台并打开 Amazon Redshift 控制台，网址：[https://console.aws.amazon.com/redshiftv2/](https://console.amazonaws.cn/redshiftv2/)。

1. 在导航菜单上，选择**集群**，然后选择您的集群。此时会显示集群详细信息页面。

1. 在集群或命名空间详细信息页面中，如果您没有数据库连接，则从**数据共享**选项卡上的**数据共享**部分中，连接到数据库。在**在我的账户中创建的数据共享**部分中，选择**创建数据共享**。此时会显示**创建数据共享**页面。

1. 选择**创建数据共享**。您只能从本地数据库创建数据共享。如果您未连接到数据库，则会显示**连接到数据库**页面。按[连接到数据库](connect-database-console.md)中的步骤连接到数据库。如果最近存在连接，则会显示**创建数据共享**页面。

1. 在**数据共享信息**部分，选择以下选项之一：
   + 选择**数据共享**来创建数据共享，以便跨不同的 Amazon Redshift 数据仓库（预置集群或无服务器端点）或在同一个 Amazon Web Services 账户或不同 Amazon Web Services 账户中共享数据，从而进行读取或写入。
   + 选择 **Amazon Web Services Data Exchange 数据共享**创建数据共享，以通过 Amazon Web Services Data Exchange 许可您的数据。

1. 指定**数据共享名称**、**数据库名称**和**可公开访问**的值。更改数据库名称时，请建立新的数据库连接。

1. 使用**范围内的权限**或**直接权限**部分将对象添加到您的数据共享。要向数据共享中添加对象，请参阅[在 Amazon Redshift 中创建数据共享](writes-creating-datashare.md)。

1. 在**数据使用者**部分，可以选择发布到 Amazon Redshift，或者发布到 Amazon Glue Data Catalog，这将开始通过 Lake Formation 共享数据的过程。将数据共享发布到 Amazon Redshift，即意味着与另一个充当使用者的命名空间或 Amazon Redshift 账户共享数据。
**注意**  
创建数据共享后，您无法编辑配置以发布到其他选项。

1. 选择**创建数据共享**。

------
#### [ SQL ]

下面的命令将创建一个数据共享：

```
CREATE DATASHARE salesshare;
```

在创建数据共享时，每个数据共享都与一个数据库相关联。只有该数据库中的对象才能在该数据共享中共享。可以在具有相同或不同粒度对象的同一数据库上创建多个数据共享。集群可以创建的数据共享数量没有限制。您还可以使用 Amazon Redshift 控制台创建数据共享。有关更多信息，请参阅 [CREATE DATASHARE](r_CREATE_DATASHARE.md)。

还可以在创建过程中控制数据共享的安全限制。以下示例显示支持具有公有 IP 访问权限的使用者读取数据共享。

```
CREATE DATASHARE my_datashare [PUBLICACCESSIBLE = TRUE];
```

设置 PUBLICACCESSIBLE = TRUE 允许使用者从可公开访问的集群和预置工作组中查询您的数据共享。如果您不想允许查询，请将其省略或明确设置为 false。

您可以在创建数据共享后修改有关使用者类型的属性。例如，您可以定义希望使用给定数据共享中的数据的集群不能公开访问。来自不符合数据共享中指定的安全限制的使用者集群的查询将在查询运行时被拒绝。有关更多信息，请参阅 [ALTER DATASHARE](r_ALTER_DATASHARE.md)。

------

## 将数据共享对象添加到数据共享
<a name="add-datashare-object-console"></a>

您可以通过以下过程之一，在控制台上和使用 SQL 添加各种类型的数据库对象。

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

可以使用**范围内的权限**或**直接权限**部分将对象添加到您的数据共享。选择**授予范围内的权限**或**授予直接权限**以添加对象。选择**添加**按钮以添加对象。此时将显示对话框。执行以下步骤：

1. 如果您选择**授予范围内的权限**，则会出现**授予范围内的权限**页面，您可以在其中授予数据库或架构级别的范围内权限。具有范围内权限的数据共享对数据库或架构中的所有当前和未来对象都具有指定的权限。有关更多详细信息，请参阅 [限定范围权限](t_scoped-permissions.md)。

   1. 接下来，选择**数据库范围内权限**以授予数据库级别的范围内权限。当您授予范围内权限时，它们将在创建数据共享时应用于当前数据库。这些权限不能授予单个对象，但适用于现有对象和新对象（架构、表、视图、UDF）。

   1. 为架构、表或视图或用户定义的函数选择范围内权限。这意味着，数据库中的所有对象都具有授予使用者的选定权限。选择**授予**以完成授予数据库范围内权限的过程。

   1. 然后，选择**架构范围内权限**以授予架构级别的范围内权限。当您授予架构范围内权限时，添加到架构的所有对象都具有指定的数据共享权限。

   1. 从下拉列表中选择要添加到数据共享的架构。一次只可选择一个架构。然后，选择要授予对所选架构的直接权限。

   1. 为您的架构对象（如表、视图和用户定义的函数）选择范围内权限。对架构中所有匹配的对象授予权限。这些对象可以是现有对象，也可以是将来添加的对象。应用权限后，如果不撤销范围内权限，则无法从对象移除权限。

   1. 选择**授予**以完成授予架构范围内权限的过程。

1. 如果您选择**授予直接权限**，则会出现**授予直接权限**页面，您可以在其中授予每个对象级别（例如架构、表、视图或用户定义的函数）的直接权限。要授予直接权限，必须先将相关架构添加到数据共享。

   1. 接下来，选择向架构**授予直接权限**，来对特定架构应用直接权限。然后，为您的架构对象（例如表、视图和用户定义的函数）选择架构权限，并选择要添加到数据共享的架构。选择**授予**以完成向数据共享添加架构的过程。

   1. 将架构添加到数据共享后，您可以继续为架构对象添加直接权限。再次选择**授予直接权限**。将出现**授予直接权限**页面。然后，导航到架构对象的直接权限选项卡。

   1. 选择**授予对表和视图的直接权限**，以授予对这些对象的对象级直接权限。从列表中选择所需的直接权限和所需的对象。使用搜索字段来查找数据共享对象。选择“授予”以完成向数据共享添加表和视图的过程。

   1. 选择**授予对用户定义函数的直接权限**，以授予对用户定义函数的对象级直接权限。从列表中选择所需的直接权限和所需的对象。使用搜索字段来查找数据共享对象。选择**授予**以完成向数据共享添加用户定义函数的过程。

1. 您也可以选择是否要**添加未来对象**。如果您选择将添加到架构中的数据共享对象包含在内，则意味着，添加到该架构中的对象会自动添加到数据共享中。

1. 选择**添加**以完成该部分并添加对象。它们将列在**数据共享对象**下。

1. 添加对象后，您可以选择单个对象并编辑其权限。如果您选择架构，则会出现一个对话框，询问您是否要添加**限定范围权限**。这使得架构中的每个现有或新增对象都具有一组适用于该对象类型的预选权限。例如，管理员可以设置所有添加的表都具有 SELECT 和 UPDATE 权限。

1. 所有数据共享对象都列在**范围内的权限**或**直接权限**部分下。

1. 在**数据使用者**部分，您可以添加命名空间或添加 Amazon 账户作为数据共享的使用者。

1. 选择**创建数据共享**以保存您的更改。

创建数据共享后，它会出现在**我的命名空间中创建的数据共享**下的列表中。如果从列表中选择数据共享，则可以查看其使用者、对象和其他属性。

------
#### [ SQL ]

使用 SQL，数据共享拥有者必须授予对要添加到数据共享的架构的 USAGE 权限。GRANT 用于授权对架构的各种操作，包括 CREATE 和 USAGE。架构中包含共享对象：

```
CREATE SCHEMA myshared_schema1;
CREATE SCHEMA myshared_schema2;
 
GRANT USAGE ON SCHEMA myshared_schema1 TO DATASHARE my_datashare;
GRANT CREATE, USAGE ON SCHEMA myshared_schema2 TO DATASHARE my_datashare;
```

或者，管理员可以继续运行 ALTER 命令将架构添加到数据共享。以这种方式添加架构时，仅授予 USAGE 权限。

```
ALTER DATASHARE my_datashare ADD SCHEMA myshared_schema1;
```

管理员添加架构后，可以授予对架构中对象的数据共享权限。这些权限可以是读取和写入权限。GRANT ALL 示例显示了如何授予所有权限。

```
GRANT SELECT, INSERT ON TABLE myshared_schema1.table1, myshared_schema1.table2, myshared_schema2.table1
TO DATASHARE my_datashare;
                     
GRANT ALL ON TABLE myshared_schema1.table4 TO DATASHARE my_datashare;
```

您可以继续运行 ALTER DATASHARE 等命令来添加表。这样做时，只会对添加的对象授予 SELECT 权限。

```
ALTER DATASHARE my_datashare ADD TABLE myshared_schema1.table1, myshared_schema1.table2, myshared_schema2.table1;
```

您可以向数据共享授予对数据库或架构中某一类型的所有对象的范围内权限。具有范围内权限的数据共享对数据库或架构中的所有当前和未来对象都具有指定的权限。

 您可以在 [SVV\$1DATABASE\$1PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md) 中查看数据库级限定权限的范围。您可以在 [SVV\$1SCHEMA\$1PRIVILEGES](r_SVV_SCHEMA_PRIVILEGES.md) 中查看架构级限定权限的范围。

以下是向数据共享授予范围内权限的语法。有关限定范围权限的更多信息，请参阅[限定范围权限](t_scoped-permissions.md)。

```
GRANT { CREATE | USAGE | ALTER | DROP } [,...] | ALL [ PRIVILEGES ] }FOR SCHEMAS IN
DATABASE db_name 
TO DATASHARE { datashare_name}

GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | ALTER | TRUNCATE | REFERENCES } [, ...] } | ALL [PRIVILEGES] } }FOR TABLES IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO DATASHARE { datashare_name}

GRANT { EXECUTE | ALL [ PRIVILEGES ] }FOR FUNCTIONS IN
{SCHEMA schema_name [DATABASE db_name ] | DATABASE db_name }
TO DATASHARE { datashare_name}
```

------

## 将数据使用者添加到数据共享
<a name="add-data-consumer-console"></a>

您可以将一个或多个数据使用者添加到数据共享。数据使用者可以是唯一标识 Amazon Redshift 集群或 Amazon Web Services 账户的命名空间。

您必须明确选择禁用或启用将您的数据共享与具有公共访问权限的集群共享。
+ 选择**向数据共享中添加命名空间**。命名空间是 Amazon Redshift 集群的全局唯一标识符 (GUID)。
+ 选择向数据共享**添加 Amazon Web Services 账户**。指定的 Amazon Web Services 账户 必须具有对数据共享的访问权限。