Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Assigning Account Passwords

8.2.14 分配账户密码

连接到 MySQL 服务器的客户端所需的凭证可能包括密码。本节描述了如何为 MySQL 账户分配密码。

MySQL 在 user 表中存储凭证,该表位于 mysql 系统数据库中。只有具有 CREATE USER 权限的用户,或者拥有 mysql 数据库的权限(INSERT 权限以创建新账户,UPDATE 权限以修改现有账户),才能执行密码分配或修改操作。如果启用了 read_only 系统变量,则使用账户修改语句,例如 CREATE USERALTER USER,还需要 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限)。

这里的讨论仅总结了最常见的密码分配语句的语法。有关其他可能性,请参阅 第 15.7.1.3 节,“CREATE USER 语句”第 15.7.1.1 节,“ALTER USER 语句”第 15.7.1.10 节,“SET PASSWORD 语句”

MySQL 使用插件来执行客户端身份验证;请参阅 第 8.2.17 节,“可插拔身份验证”。在密码分配语句中,与账户关联的身份验证插件执行任何必要的哈希处理,以便在存储密码之前对其进行混淆。对于这里描述的语句,MySQL 会自动对指定的密码进行哈希处理。此外,还有语法允许在 CREATE USERALTER USER 中指定哈希值。有关详细信息,请参阅这些语句的描述。

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

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

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

要分配或更改现有账户的密码,请使用 ALTER USER 语句带有 IDENTIFIED 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 列中具有来自您连接的客户端主机。

Warning

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

如果您使用 MySQL 复制,请注意作为 CHANGE REPLICATION SOURCE TO 一部分的密码在复制中有效长度限制为 32 个字符;如果密码更长,任何多余的字符将被截断。这不是 MySQL 服务器的一般限制,而是 MySQL 复制的特定问题。