Documentation Home
MySQL 8.0 参考手册  / 第 6 章 安全  / 6.2 访问控制和账户管理  /  6.2.14 分配账户密码

6.2.14 分配账户密码

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

MySQL 将凭据存储在系统数据库的user表中。mysql分配或修改密码的操作仅允许具有 CREATE USER特权或mysql 数据库INSERT特权(创建新帐户的UPDATE 特权,修改现有帐户的特权)的用户使用。如果 read_only启用了系统变量,则使用诸如 CREATE USER或 之类的帐户修改语句ALTER USER还需要CONNECTION_ADMIN特权(或已弃用的SUPER特权)。

此处的讨论仅总结了最常见的密码分配语句的语法。有关其他可能性的完整详细信息,请参阅第 13.7.1.3 节,“CREATE USER 语句”第 13.7.1.1 节,“ALTER USER 语句”第 13.7.1.10 节,“SET PASSWORD 语句”

MySQL 使用插件来执行客户端身份验证;请参阅 第 6.2.17 节,“可插入身份验证”。在密码分配语句中,与帐户关联的身份验证插件执行指定的明文密码所需的任何散列。这使 MySQL 能够在将密码存储到mysql.user系统表之前混淆密码。对于此处描述的语句,MySQL 会自动散列指定的密码。还有用于CREATE USERALTER USER允许按字面指定散列值的语法。有关详细信息,请参阅这些语句的描述。

要在创建新帐户时分配密码,请使用 CREATE USER并包含一个 IDENTIFIED BY子句:

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

CREATE USER还支持指定帐户身份验证插件的语法。请参阅 第 13.7.1.3 节,“CREATE USER 语句”

要为现有帐户分配或更改密码,请使用 ALTER USERIDENTIFIED BY子句的语句:

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

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

ALTER USER USER() IDENTIFIED BY 'password';

要从命令行更改帐户密码,请使用 mysqladmin命令:

mysqladmin -u user_name -h host_name password "password"

此命令为其设置密码的帐户是mysql.user系统表中的行与列中user_name的 行和列中您连接User客户端主机相匹配的帐户 。 Host

警告

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

如果您正在使用 MySQL 复制,请注意,目前,副本作为 CHANGE REPLICATION SOURCE TO 语句(从 MySQL 8.0.23 开始)或CHANGE MASTER TO语句(MySQL 8.0.23 之前)的一部分使用的密码的长度实际上限制为 32 个字符;如果密码较长,则会截断任何多余的字符。这不是由于 MySQL 服务器通常强加的任何限制,而是 MySQL 复制特有的问题。