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

6.2.10 分配帐户密码

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

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

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

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

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

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

CREATE USER还支持指定帐户身份验证插件的语法。请参阅 第 13.7.1.2 节,“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"

The account for which this command sets the password is the one with a row in the mysql.user system table that matches user_name in the User column and the client host from which you connect in the Host column.

Warning

Setting a password using mysqladmin should be considered insecure. On some systems, your password becomes visible to system status programs such as ps that may be invoked by other users to display command lines. MySQL clients typically overwrite the command-line password argument with zeros during their initialization sequence. However, there is still a brief interval during which the value is visible. Also, on some systems this overwriting strategy is ineffective and the password remains visible to ps. (SystemV Unix systems and perhaps others are subject to this problem.)

如果您正在使用 MySQL 复制,请注意,目前,副本作为 CHANGE MASTER TO语句的一部分使用的密码的长度实际上限制为 32 个字符;如果密码较长,则会截断任何多余的字符。这不是由于 MySQL 服务器通常强加的任何限制,而是 MySQL 复制特有的问题。(有关更多信息,请参阅错误 #43439。)