文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
Man Pages (TGZ) - 258.2Kb
Man Pages (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  为账户分配密码

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 USERALTER USER,允许按字面指定哈希值。有关详细信息,请参阅这些语句的描述。

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

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

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

要为现有账户分配或更改密码,请使用带 IDENTIFIED BY 子句的 ALTER USER 语句

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 列中与 user_name 匹配,并在 Host 列中与您连接的客户端主机 匹配 的行中。

警告

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

如果您使用的是 MySQL 复制,请注意,副本作为 CHANGE REPLICATION SOURCE TO 的一部分使用的密码实际上限制为 32 个字符;如果密码更长,则会截断多余的字符。这并不是由于 MySQL Server 通常施加的任何限制,而是 MySQL 复制特有的问题。