### 6.2.14 分配帐户密码

[](<>)[](<>)[](<>)[](<>)

连接到 MySQL 服务器的客户端所需的凭据可以包括密码。本节介绍如何为 MySQL 帐户分配密码。

MySQL 将凭据存储在`用户`表中的`mysql`系统数据库。分配或修改密码的操作只允许具有[`创建用户`](privileges-provided.html#priv_create-user)特权，或者，或者，特权`mysql`数据库（[`插入`](privileges-provided.html#priv_insert)创建新帐户的特权，[`更新`](privileges-provided.html#priv_update)修改现有帐户的权限）。如果[`只读`](server-system-variables.html#sysvar_read_only)启用系统变量，使用帐户修改语句，例如[`创建用户`](create-user.html)要么[`更改用户`](alter-user.html)另外需要[`CONNECTION_ADMIN`](privileges-provided.html#priv_connection-admin)特权（或已弃用的[`极好的`](privileges-provided.html#priv_super)特权）。

这里的讨论只总结了最常见的密码分配语句的语法。有关其他可能性的完整详细信息，请参阅[第 13.7.1.3 节，“创建用户语句”](create-user.html),[第 13.7.1.1 节，“ALTER USER 语句”](alter-user.html)， 和[第 13.7.1.10 节，“SET PASSWORD 语句”](set-password.html).

MySQL 使用插件来执行客户端身份验证；看[第 6.2.17 节，“可插拔身份验证”](pluggable-authentication.html).在密码分配语句中，与帐户关联的身份验证插件执行指定的明文密码所需的任何散列。这使 MySQL 能够在将密码存储在`mysql.user`系统表。对于此处描述的语句，MySQL 自动对指定的密码进行哈希处理。还有语法[`创建用户`](create-user.html)和[`更改用户`](alter-user.html)允许按字面指定散列值。有关详细信息，请参阅这些语句的说明。

要在创建新帐户时分配密码，请使用[`创建用户`](create-user.html)并包括一个`由`条款：

```
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
```

[`创建用户`](create-user.html)还支持指定帐户身份验证插件的语法。看[第 13.7.1.3 节，“创建用户语句”](create-user.html).

要为现有帐户分配或更改密码，请使用[`更改用户`](alter-user.html)声明与`由`条款：

```
ALTER USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
```

如果您没有以匿名用户身份连接，您可以更改自己的密码，而无需按字面命名您自己的帐户：

```
ALTER USER USER() IDENTIFIED BY 'password';
```

要从命令行更改帐户密码，请使用[**mysql管理员**](mysqladmin.html)命令：

```
mysqladmin -u user_name -h host_name password "password"
```

此命令为其设置密码的帐户是在`mysql.user`匹配的系统表*`用户名`*在里面`用户`列和客户端主机*您连接的地方*在里面`主持人`柱子。

警告

使用设置密码[**mysql管理员**](mysqladmin.html)应该被考虑*不安全*.在某些系统上，您的密码对系统状态程序可见，例如**ps**其他用户可以调用它来显示命令行。MySQL 客户端通常在初始化序列期间用零覆盖命令行密码参数。但是，仍然有一个短暂的时间间隔，在此期间该值是可见的。此外，在某些系统上，这种覆盖策略是无效的，密码仍然可见**ps**.（SystemV Unix 系统和其他系统可能会遇到这个问题。）

如果您正在使用 MySQL 复制，请注意，目前，副本使用的密码作为[`将复制源更改为`](change-replication-source-to.html)语句（来自 MySQL 8.0.23）或[`将主更改为`](change-master-to.html)语句（在 MySQL 8.0.23 之前）的长度实际上限制为 32 个字符；如果密码较长，则会截断任何多余的字符。这不是由于 MySQL 服务器通常施加的任何限制，而是 MySQL 复制特有的问题。
