

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

# ALTER USER
<a name="r_ALTER_USER"></a>

更改数据库用户。

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

以下是 ALTER USER 所需的权限：
+ Superuser
+ 具有 ALTER USER 权限的用户
+ 想更改自己密码的当前用户

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

```
ALTER USER username [ WITH ] option [, ... ]

where option is

CREATEDB | NOCREATEDB
| CREATEUSER | NOCREATEUSER
| SYSLOG ACCESS { RESTRICTED | UNRESTRICTED }
| PASSWORD { 'password' | 'md5hash' | 'sha256hash' | DISABLE }
[ VALID UNTIL 'expiration_date' ]
| RENAME TO new_name |
| CONNECTION LIMIT { limit | UNLIMITED }
| SESSION TIMEOUT limit | RESET SESSION TIMEOUT
| SET parameter { TO | = } { value | DEFAULT }
| RESET parameter
| EXTERNALID external_id
```

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

 *username*   
用户的名称。

WITH   
可选关键字。

CREATEDB \| NOCREATEDB   
CREATEDB 选项允许用户创建新数据库。NOCREATEDB 是默认值。

CREATEUSER \| NOCREATEUSER   
使用 CREATEUSER 选项可以创建具备所有数据库权限的超级用户，包括 CREATE USER。默认值为 NOCREATEUSER。有关更多信息，请参阅 [超级用户](r_superusers.md)。

SYSLOG ACCESS { RESTRICTED \| UNRESTRICTED }  <a name="alter-user-syslog-access"></a>
一个子句，它指定用户必须对 Amazon Redshift 系统表和视图具有的访问级别。  
拥有 SYSLOG ACCESS RESTRICTED 权限的普通用户在用户可见的系统表和视图中只能查看该用户生成的行。默认值为 RESTRICTED。  
拥有 SYSLOG ACCESS UNRESTRICTED 权限的普通用户可以查看用户可见的系统表和视图中的所有行，包括其他用户生成的行。UNRESTRICTED 不向普通用户授予对超级用户可见的表的访问权限。只有超级用户可以查看超级用户可见的表。  
如果向用户授予对系统表的无限制访问权限，用户便可以看到由其他用户生成的数据。例如，STL\_QUERY 和 STL\_QUERYTEXT 包含 INSERT、UPDATE 和 DELETE 语句的完整文本（其中可能包含敏感的用户生成数据）。
SVV\_TRANSACTIONS 中的所有行都对所有用户可见。  
有关更多信息，请参阅 [系统表和视图中的数据可见性](cm_chap_system-tables.md#c_visibility-of-data)。

PASSWORD { '*password*' \| '*md5hash*' \| '*sha256hash*' \| DISABLE }  
设置用户的密码。  
默认情况下，用户可以更改自己的密码，除非密码被禁用。要禁用用户的密码，请指定 DISABLE。禁用某个用户的密码后，将从系统中删除该密码，而此用户只能使用临时 Amazon Identity and Access Management (IAM) 用户凭证进行登录。有关更多信息，请参阅[使用 IAM 身份验证生成数据库用户凭证](https://docs.amazonaws.cn/redshift/latest/mgmt/generating-user-credentials.html)。只有超级用户才能启用或禁用密码。您不能禁用超级用户的密码。要启用密码，请运行 ALTER USER 并指定密码。  
有关使用 PASSWORD 参数的详细信息，请参阅[CREATE USER](r_CREATE_USER.md)。

VALID UNTIL '*expiration\_date*'  
指定密码具有过期日期。使用值 `'infinity'` 可避免密码具有过期日期。此参数的有效数据类型为时间戳。  
只有超级用户才能使用此参数。

RENAME TO   
重命名用户。

 *new\_name*   
用户的新名称。有关有效名称的更多信息，请参阅[名称和标识符](r_names.md)。  
在重命名用户时，还必须重置用户的密码。重置密码不必与之前的密码不同。用户名用作密码加密的一部分，因此在重命名用户时，将会清除密码。用户将无法登录，直至重置密码。例如：  

```
alter user newuser password 'EXAMPLENewPassword11'; 
```

CONNECTION LIMIT { *limit* \| UNLIMITED }   
允许用户同时打开的数据库连接的最大数量。此限制不适用于超级用户。使用 UNLIMITED 关键字设置允许的并行连接的最大数量。对每个数据库的连接数量可能也会施加限制。有关更多信息，请参阅 [CREATE DATABASE](r_CREATE_DATABASE.md)。默认为 UNLIMITED。要查看当前连接，请查询 [STV\_SESSIONS](r_STV_SESSIONS.md) 系统视图。  
如果用户及数据库连接限制均适用，当用户尝试连接时，必须有一个同时低于这两个限制的未使用的连接槽可用。

SESSION TIMEOUT *limit* \| RESET SESSION TIMEOUT  
会话保持非活动或空闲状态的最长时间（秒）。范围在 60 秒（1 分钟）到 1,728,000 秒（20 天）之间。如果没有为用户设置会话超时，则应用集群设置。有关更多信息，请参阅《Amazon Redshift 管理指南》**中的 [Amazon Redshift 中的配额和限制](https://docs.amazonaws.cn/redshift/latest/mgmt/amazon-redshift-limits.html)。  
设置会话超时时，它仅应用于新会话。  
要查看有关活动用户会话的信息，包括开始时间、用户名和会话超时，请查询 [STV\_SESSIONS](r_STV_SESSIONS.md) 系统视图。要查看有关用户会话历史记录的信息，请查询 [STL\_SESSIONS](r_STL_SESSIONS.md) 视图。要检索有关数据库用户的信息（包括会话超时值），请查询 [SVL\_USER\_INFO](r_SVL_USER_INFO.md) 视图。

SET   
针对指定用户运行的所有会话，将某个配置参数设置为新的默认值。

RESET   
为指定用户将某个配置参数重置为原始默认值。

 *参数*   
要设置或重置的参数的名称。

 *值*   
参数的新值。

DEFAULT   
针对指定用户运行的所有会话，将配置参数设置为默认值。

EXTERNALID *external\_id*   
用户的标识符，与身份提供者关联。用户必须已禁用密码。有关更多信息，请参阅 [Amazon Redshift 的原生身份提供者 (IdP) 联合身份验证](https://docs.amazonaws.cn/redshift/latest/mgmt/redshift-iam-access-control-native-idp.html)。

## 使用说明
<a name="r_ALTER_USER_usage_notes"></a>
+ **尝试更改 rdsdb** - 您无法更改名为 `rdsdb` 的用户。
+ **创建未知密码** – 使用 Amazon Identity and Access Management (IAM) 身份验证创建数据库用户凭证时，您可能希望创建仅使用临时凭证便可以登录的超级用户。您不能禁用超级用户的密码，但可以使用随机生成的 MD5 哈希字符串创建一个未知密码。

  ```
  alter user iam_superuser password 'md51234567890123456780123456789012';
  ```
+ **设置 search\_path** – 当您使用 ALTER USER 命令设置 [search\_path](r_search_path.md) 参数时，所做修改将在指定的用户下次登录时生效。如果您希望更改当前用户和会话的 search\_path 值，请使用 SET 命令。
+ **设置时区** – 当您将 SET TIMEZONE 与 ALTER USER 命令一起使用时，所做修改将在指定的用户下次登录时生效。
+ **使用动态数据掩蔽和行级安全策略** – 当您的预调配集群或无服务器命名空间具有任何动态数据掩蔽或行级安全策略时，普通用户将无法使用以下命令：

  ```
  ALTER <current_user> SET enable_case_sensitive_super_attribute/enable_case_sensitive_identifier/downcase_delimited_identifier
  ```

  只有超级用户和具有 ALTER USER 权限的用户才能设置这些配置选项。有关行级别安全性的信息，请参阅[行级别安全性](t_rls.md)。有关动态数据掩蔽的信息，请参阅[动态数据掩蔽](t_ddm.md)。

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

以下示例为用户 ADMIN 授予创建数据库的权限：

```
alter user admin createdb;
```

以下示例将用户 ADMIN 的密码设置为 `adminPass9`，并为密码设置一个到期日期和时间：

```
alter user admin password 'adminPass9'
valid until '2017-12-31 23:59';
```

以下示例将用户 ADMIN 重命名为 SYSADMIN：

```
alter user admin rename to sysadmin;
```

以下示例将用户的空闲会话超时更新为 300 秒。

```
ALTER USER dbuser SESSION TIMEOUT 300;
```

重置用户的空闲会话超时。重置它时，将应用集群设置。您必须是数据库超级用户才能执行此命令。有关更多信息，请参阅《Amazon Redshift 管理指南》**中的 [Amazon Redshift 中的配额和限制](https://docs.amazonaws.cn/redshift/latest/mgmt/amazon-redshift-limits.html)。

```
ALTER USER dbuser RESET SESSION TIMEOUT;
```

以下示例更新名为 `bob` 的用户的外部 ID。命名空间为 `myco_aad`。如果命名空间与注册的身份提供者没有关联，则会导致错误。

```
ALTER USER myco_aad:bob EXTERNALID "ABC123" PASSWORD DISABLE;
```

以下示例为某个特定数据库用户运行的所有会话设置时区。该示例更改后续会话的时区，而不是更改当前会话的时区。

```
ALTER USER odie SET TIMEZONE TO 'Europe/Zurich';
```

以下示例设置了允许用户 `bob` 打开的最大数据库连接数。

```
ALTER USER bob CONNECTION LIMIT 10;
```