

 从补丁 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="t_metadata_security"></a>

与 Amazon Redshift 的行级安全性一样，元数据安全性可让您对元数据进行更精细的控制。如果为预置集群或无服务器工作组启用了元数据安全性，则用户可以查看他们有权查看的对象的元数据。元数据安全性可让您根据自己的需求来区分可见性。例如，您可以使用单个数据仓库来集中所有数据存储。但是，如果您存储多个扇区的数据，则管理安全性可能会变得很麻烦。启用元数据安全性后，您可以配置自己的可见性。一个扇区的用户可以对其对象有更多的可见性，而您则限制另一个扇区用户的查看权限。元数据安全性支持所有对象类型，例如架构、表、视图、实体化视图、存储过程、用户定义的函数和机器学习模型。

用户可以在以下情况下查看对象的元数据：
+ 如果向用户授予对象访问权限。
+ 如果向用户所属的组或角色授予对象访问权限。
+ 对象是公开的。
+ 用户是数据库对象的拥有者。

要启用元数据安全性，请使用 [ALTER SYSTEM](https://docs.amazonaws.cn/redshift/latest/dg/r_ALTER_SYSTEM.html) 命令。以下是如何使用具有元数据安全性的 ALTER SYSTEM 命令的语法。

```
ALTER SYSTEM SET metadata_security=[true|t|on|false|f|off];
```

启用元数据安全性后，所有拥有必要权限的用户都可以查看他们有权访问的对象的相关元数据。如果您只希望某些用户能够查看元数据安全性，请向角色授予 `ACCESS CATALOG` 权限，然后将该角色分配给用户。有关使用角色更好地控制安全性的更多信息，请参阅[基于角色的访问控制](https://docs.amazonaws.cn/redshift/latest/dg/t_Roles.html)。

以下示例演示如何向角色授予 `ACCESS CATALOG` 权限，然后将该角色分配给用户。有关授予权限的更多信息，请参阅 [GRANT](https://docs.amazonaws.cn/redshift/latest/dg/r_GRANT.html) 命令。

```
CREATE ROLE sample_metadata_viewer;

GRANT ACCESS CATALOG TO ROLE sample_metadata_viewer;

GRANT ROLE sample_metadata_viewer to salesadmin;
```

如果您希望使用已定义的角色，则[系统定义的角色](https://docs.amazonaws.cn/redshift/latest/dg/r_roles-default.html) `operator`、`secadmin`、`dba` 和 `superuser` 都具有查看对象元数据的必要权限。默认情况下，超级用户可以看到完整的目录。

```
GRANT ROLE operator to sample_user;
```

如果您使用角色来控制元数据安全性，则可以访问基于角色的访问控制附带的所有系统视图和函数。例如，您可以查询 [ SVV\$1ROLES](https://docs.amazonaws.cn/redshift/latest/dg/r_SVV_ROLES.html) 视图以查看所有角色。要查看用户是否是角色或组的成员，请使用 [USER\$1IS\$1MEMBER\$1OF ](https://docs.amazonaws.cn/redshift/latest/dg/r_USER_IS_MEMBER_OF.html) 函数。有关 SVV 视图的完整列表，请参阅 [SVV 元数据视图](https://docs.amazonaws.cn/redshift/latest/dg/svv_views.html)。有关系统信息函数的列表，请参阅[系统信息函数](https://docs.amazonaws.cn/redshift/latest/dg/r_System_information_functions.html)。