Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

8.2.14 分配帐户密码

客户端连接到 MySQL 服务器所需的凭证可以包括密码。下面部分描述了如何为 MySQL 帐户分配密码。

MySQL 将凭证存储在 mysql 系统数据库中的 user 表中。分配或修改密码的操作只能由拥有 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 在将密码存储到mysql.user系统表之前可以混淆密码。在本节描述的语句中,MySQL 自动对指定的密码进行哈希。还有一些语法允许直接指定哈希值,详细信息请参阅相关语句的描述。

创建新账户时分配密码,请使用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_nameUser 列和您连接的客户端主机在 Host 列中的那一行记录。

Warning

使用mysqladmin设置密码应该被认为是不安全的。在某些系统上,密码可能会被系统状态程序,如ps,显示出来。MySQL客户端通常在初始化序列中覆盖命令行密码参数,但仍然有一定的时间窗口内可见。另外,在某些系统上,这种覆盖策略无效,密码仍然可见于ps。(可能包括SystemV Unix等系统)

如果您使用MySQL复制,请注意,副本在CHANGE REPLICATION SOURCE TO中使用的密码实际上被限制为32个字符长度;如果密码长于这个长度,多余的字符将被截断。这不是MySQL Server本身的限制,而是MySQL复制特有的问题。