

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

# ALTER DEFAULT PRIVILEGES
<a name="r_ALTER_DEFAULT_PRIVILEGES"></a>

定义默认访问权限集，这些权限将应用于指定的用户在以后创建的对象。默认情况下，用户只能更改他们自己的默认访问权限。只有超级用户能够为其他用户指定默认权限。

您可以将默认权限应用到角色、用户或用户组。您可以为在当前数据库中创建的所有对象全局设置默认权限，也可以仅为在指定的架构中创建的对象进行此设置。

默认权限仅应用于新对象。运行 ALTER DEFAULT PRIVILEGES 时不会更改现有对象的权限。要授予对数据库或架构中任何用户创建的所有当前和将来对象的权限，请参阅[限定范围权限](https://docs.aws.amazon.com/redshift/latest/dg/t_scoped-permissions.html)。

要查看有关数据库用户的默认权限的信息，请查询 [PG\$1DEFAULT\$1ACL](r_PG_DEFAULT_ACL.md) 系统目录表。

有关权限的更多信息，请参阅 [GRANT](r_GRANT.md)。

## 所需的权限
<a name="r_ALTER_DEFAULT_PRIVILEGES-privileges"></a>

以下是 ALTER DEFAULT PRIVILEGES 所需的权限：
+ Superuser
+ 具有 ALTER DEFAULT PRIVILEGES 权限的用户
+ 更改自己的默认访问权限的用户
+ 为其具有访问权限的 Schema 设置权限的用户

## 语法
<a name="r_ALTER_DEFAULT_PRIVILEGES-synopsis"></a>

```
ALTER DEFAULT PRIVILEGES
    [ FOR USER target_user [, ...] ]
    [ IN SCHEMA schema_name [, ...] ]
    grant_or_revoke_clause

where grant_or_revoke_clause is one of:

GRANT { { SELECT | INSERT | UPDATE | DELETE | DROP | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	TO { user_name [ WITH GRANT OPTION ] | ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	TO { user_name [ WITH GRANT OPTION ] |  ROLE role_name | GROUP group_name | PUBLIC } [, ...]

GRANT { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	TO { user_name [ WITH GRANT OPTION ] |  ROLE role_name | GROUP group_name | PUBLIC } [, ...]

REVOKE [ GRANT OPTION FOR ] { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	FROM user_name [, ...] [ RESTRICT ]

REVOKE  { { SELECT | INSERT | UPDATE | DELETE | REFERENCES | TRUNCATE } [,...] | ALL [ PRIVILEGES ] }
	ON TABLES
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	FROM user_name [, ...] [ RESTRICT ]

REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
	ON FUNCTIONS
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]

REVOKE [ GRANT OPTION FOR ] { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	FROM user_name [, ...] [ RESTRICT ]

REVOKE { EXECUTE | ALL [ PRIVILEGES ] }
	ON PROCEDURES
	FROM { ROLE role_name | GROUP group_name | PUBLIC } [, ...] [ RESTRICT ]
```

## 参数
<a name="r_ALTER_DEFAULT_PRIVILEGES-parameters"></a>

FOR USER *target\$1user*  <a name="default-for-user"></a>
可选。为其定义默认权限的用户的名称。只有超级用户能够为其他用户指定默认权限。默认值为当前用户。

IN SCHEMA *schema\$1name*   <a name="default-in-schema"></a>
可选。如果出现 IN SCHEMA 子句，则指定默认权限将应用于在指定 *schema\$1name* 中创建的新对象。在这种情况下，作为 ALTER DEFAULT PRIVILEGES 目标的用户或用户组必须对指定 schema 拥有 CREATE 权限。特定于某个 schema 的默认权限将添加到现有的全局默认权限中。默认情况下，默认权限全局应用于整个数据库。

GRANT   <a name="default-grant"></a>
针对指定用户创建的所有新表和视图、函数或存储过程，向指定的用户或组授予的权限集。与使用 [GRANT](r_GRANT.md) 命令一样，您可以使用 GRANT 子句来设置相同的权限和选项。

WITH GRANT OPTION   <a name="default-grant-option"></a>
一个子句，指示接收权限的用户又可以将相同权限授予其他用户。您无法将 WITH GRANT OPTION 授予组或 PUBLIC。

TO *user\$1name* \$1 ROLE *role\$1name* \$1 GROUP *group\$1name*   <a name="default-to"></a>
将指定的默认权限应用于的用户、角色或用户组的名称。

REVOKE   <a name="default-revoke"></a>
针对指定用户创建的所有新表、函数或存储过程，从指定的用户或组撤销权限集。与使用 [REVOKE](r_REVOKE.md) 命令一样，您可以使用 REVOKE 子句来设置相同的权限和选项。

GRANT OPTION FOR  <a name="default-revoke-option"></a>
 一个子句，仅撤消将指定的权限授予其他用户的选项，而不撤消权限本身。您无法从组或 PUBLIC 撤消 GRANT OPTION。

FROM *user\$1name* \$1 ROLE *role\$1name* \$1 GROUP *group\$1name*  <a name="default-from"></a>
默认情况下从其撤消指定权限的用户、角色或用户组的名称。

RESTRICT   <a name="default-restrict"></a>
RESTRICT 选项仅会撤消用户直接授予的权限。这是默认值。

## 示例
<a name="r_ALTER_DEFAULT_PRIVILEGES-examples"></a>

假设您希望允许用户组 `report_readers` 中的所有用户查看用户 `report_admin` 创建的所有表和视图。在这种情况下，以超级用户身份执行以下命令。

```
alter default privileges for user report_admin grant select on tables to group report_readers; 
```

在以下示例中，第一个命令授予对您创建的所有新表的 SELECT 权限。无论何时创建新视图，都必须显式授予对该视图的权限，或者再次运行 `alter default privileges` 命令。

```
alter default privileges grant select on tables to public; 
```

以下示例针对您在 `sales_admin` schema 中创建的所有新表和视图，将 INSERT 权限授予 `sales` 用户组。

```
alter default privileges in schema sales grant insert on tables to group sales_admin; 
```

以下示例撤消上述示例中 ALTER DEFAULT PRIVILEGES 命令的执行效果。

```
alter default privileges in schema sales revoke insert on tables from group sales_admin;
```

默认情况下，PUBLIC 用户组对所有新的用户定义的函数具有执行权限。要撤消对您的新函数的 `public` 执行权限，然后只将执行权限授予 `dev_test` 用户组，请运行以下命令。

```
alter default privileges revoke execute on functions from public;
alter default privileges grant execute on functions to group dev_test;
```