

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

# 在 Amazon Redshift 中向数据共享添加对象
<a name="writes-adding-datashare"></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. 在**数据使用者**部分，您可以添加命名空间或添加 AWS 账户作为数据共享的使用者。

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\_DATABASE\_PRIVILEGES](r_SVV_DATABASE_PRIVILEGES.md) 中查看数据库级限定权限的范围。您可以在 [SVV\_SCHEMA\_PRIVILEGES](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}
```

------