

 从补丁 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-managing-permissions"></a>

作为生产者管理员，您可以保留对正在共享的数据集的控制权。您可以将新对象添加到数据共享中或将其从数据共享中删除。您还可以授予或撤消对使用者集群、AWS 账户或 AWS 区域的整体数据共享的访问权。当权限被撤消时，使用者集群立即失去对共享对象的访问权限，并且不能在 SVV\$1DATASHARES 中的 INBOUND 数据共享列表中看到它们。

以下示例创建数据共享 `salesshare`，添加架构 `public`，然后将表 `public.tickit_sales_redshift` 添加到 `salesshare`。它还授予指定的命名空间对 `salesshare` 的使用权限。

```
CREATE DATASHARE salesshare;
            
ALTER DATASHARE salesshare ADD SCHEMA public;

ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; 

GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';
```

对于 CREATE DATASHARE，超级用户和数据库拥有者可以创建数据共享。有关更多信息，请参阅 [CREATE DATASHARE](r_CREATE_DATASHARE.md)。对于 ALTER DATASHARE，对要添加或删除的数据共享具有所需权限的数据共享拥有者可以更改数据共享。有关更多信息，请参阅 [ALTER DATASHARE](r_ALTER_DATASHARE.md)。

作为创建器管理员，当您删除数据共享时，它将停止在使用者集群上列出。在使用者集群上通过删除的数据共享中创建的数据库和 schema 引用继续存在，其中没有对象。使用者管理员必须手动删除这些数据库。

在使用者方面，使用者管理员可以通过从数据共享创建数据库，来确定哪些用户和角色应该访问共享数据。根据您在创建数据库时选择的选项，您可以按如下方式控制对数据库的访问。有关从数据共享创建数据库的更多信息，请参阅[CREATE DATABASE](r_CREATE_DATABASE.md)。

有关设置数据共享以及从使用者读取数据的更多信息，请参阅[共享对 AWS 账户内数据的读取访问权限](https://docs.aws.amazon.com/redshift/latest/dg/within-account.html)。

**在不使用 WITH PERMISSIONS 子句的情况下创建数据库**  
管理员可以在数据库或 schema 级别控制访问权限。要控制 Schema 级别的访问权限，管理员必须通过从数据共享创建的 Amazon Redshift 数据库创建外部 Schema。

以下示例授予在数据库级别和 schema 级别访问共享表的权限。

```
GRANT USAGE ON DATABASE sales_db TO Bob;

CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE sales_db SCHEMA 'public';

GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;
```

要进一步限制访问，您可以基于共享对象创建视图，以仅显示必要的数据。然后，您可以使用这些视图向用户和角色授予访问权限。

授予用户访问数据库或架构的权限后，他们将有权访问该数据库或架构中的所有共享对象。

**使用 WITH PERMISSIONS 子句创建数据库**  
在授予对数据库或架构的使用权限后，管理员可以使用与本地数据库或架构相同的权限授予过程来进一步控制访问权限。如果没有单个对象的权限，用户即使获得了 USAGE 权限，也无法访问数据共享数据库或架构中的任何对象。

以下示例授予在数据库级别访问共享表的权限。

```
GRANT USAGE ON DATABASE sales_db TO Bob;
GRANT USAGE FOR SCHEMAS IN DATABASE sales_db TO Bob;
GRANT SELECT ON sales_db.public.tickit_sales_redshift TO Bob;
```

在授予用户访问数据库或架构的权限后，还需要授予他们访问数据库或架构中任何对象的相关权限。

## 使用 WITH PERMISSIONS 进行精细共享
<a name="share-datashare-writes"></a>

您可以通过 WITH PERMISSIONS 使用精细共享，以使集群或 Serverless 工作组能够查询数据共享。此过程假设数据共享源自您账户中的另一个集群或 Amazon Redshift Serverless 命名空间，或者来自另一个账户并已与您正在使用的命名空间相关联。

1. 使用者数据库管理员可以从数据共享中创建数据库。

   ```
   CREATE DATABASE my_ds_db [WITH PERMISSIONS] FROM DATASHARE my_datashare OF NAMESPACE 'abc123def';
   ```

   如果您使用 WITH PERMISSIONS 创建数据库，则可以向不同的用户和角色授予对数据共享对象的精细权限。否则，所有获得对数据共享数据库的 USAGE 权限的用户和角色都将获得对数据共享数据库中所有对象的所有权限。

1. 以下内容显示如何向 Redshift 数据库用户或角色授予权限。您必须连接到本地数据库才能运行这些语句。如果在运行 grant 语句之前在数据共享数据库上执行 USE 命令，则无法运行这些语句。

   ```
   GRANT USAGE ON DATABASE my_ds_db TO ROLE data_eng;
   GRANT CREATE, USAGE ON SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng;
   GRANT ALL ON ALL TABLES IN SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng;
    
   GRANT USAGE ON DATABASE my_ds_db TO bi_user;
   GRANT USAGE ON SCHEMA my_ds_db.my_shared_schema TO bi_user;
   GRANT SELECT ON my_ds_db.my_shared_schema.table1 TO bi_user;
   ```