文档首页
MySQL 8.4 参考手册
相关文档 下载本手册
PDF(US Ltr) - 39.9Mb
PDF(A4) - 40.0Mb
手册页(TGZ) - 258.5Kb
手册页(Zip) - 365.5Kb
Info(Gzip) - 4.0Mb
Info(Zip) - 4.0Mb


MySQL 8.4 参考手册  /  ...  /  SET PASSWORD 语句

15.7.1.10 SET PASSWORD 语句

SET PASSWORD [FOR user] auth_option
    [REPLACE 'current_auth_string']
    [RETAIN CURRENT PASSWORD]

auth_option: {
    = 'auth_string'
  | TO RANDOM
}

The SET PASSWORD 语句为 MySQL 用户帐户分配密码。密码可以在语句中显式指定,也可以由 MySQL 随机生成。该语句还可以包含密码验证子句,该子句指定要替换的帐户的当前密码,以及管理帐户是否具有辅助密码的子句。'auth_string''current_auth_string' 分别表示明文(未加密)密码。

注意

与其使用 SET PASSWORD 分配密码,ALTER USER 是帐户更改(包括分配密码)的首选语句。例如

ALTER USER user IDENTIFIED BY 'auth_string';
注意

用于随机密码生成、密码验证和辅助密码的子句仅适用于使用将凭据存储在 MySQL 内部身份验证插件的帐户。对于使用将身份验证执行到 MySQL 外部凭据系统的插件的帐户,密码管理也必须在外部针对该系统进行处理。有关内部凭据存储的更多信息,请参见 第 8.2.15 节“密码管理”.

The REPLACE 'current_auth_string' 子句执行密码验证。如果给出

  • REPLACE 指定要替换的帐户当前密码,以明文(未加密)字符串形式提供。

  • 如果需要更改帐户密码,则必须提供该子句以指定当前密码,作为验证尝试进行更改的用户确实知道当前密码的验证。

  • 如果帐户的密码更改可以但不必指定当前密码,则该子句是可选的。

  • 如果提供该子句但与当前密码不匹配,即使该子句是可选的,该语句也会失败。

  • REPLACE 只能在更改当前用户的帐户密码时指定。

有关通过指定当前密码进行密码验证的更多信息,请参见 第 8.2.15 节,“密码管理”

RETAIN CURRENT PASSWORD 子句实现双密码功能。如果给出

  • RETAIN CURRENT PASSWORD 将保留帐户的当前密码作为其辅助密码,并替换任何现有的辅助密码。新密码将成为主密码,但客户端可以使用该帐户使用主密码或辅助密码连接到服务器。(例外情况:如果 SET PASSWORD 语句指定的新的密码为空,即使给出 RETAIN CURRENT PASSWORD,辅助密码也将变为空。)

  • 如果为具有空主密码的帐户指定 RETAIN CURRENT PASSWORD,则语句将失败。

  • 如果帐户具有辅助密码,并且您在不指定 RETAIN CURRENT PASSWORD 的情况下更改其主密码,则辅助密码将保持不变。

有关双密码使用的更多信息,请参见 第 8.2.15 节,“密码管理”

SET PASSWORD 允许以下 auth_option 语法

  • = 'auth_string'

    为帐户分配给定的文字密码。

  • TO RANDOM

    为帐户分配 MySQL 随机生成的密码。该语句还会在结果集中返回明文密码,以使其可供执行该语句的用户或应用程序使用。

    有关结果集和随机生成密码的特征的详细信息,请参见 随机密码生成

重要事项

在某些情况下,SET PASSWORD 可能会记录在服务器日志中或客户端的 history 文件(如 ~/.mysql_history)中,这意味着任何具有读取该信息权限的人员都可以读取明文密码。有关服务器日志中发生此情况的条件以及如何控制它的信息,请参见 第 8.1.2.3 节,“密码和日志记录”。有关客户端日志记录的类似信息,请参见 第 6.5.1.3 节,“mysql 客户端日志记录”

SET PASSWORD 可与或不与显式命名用户帐户的 FOR 子句一起使用

  • 使用 FOR user 子句,该语句将为指定的帐户设置密码,该帐户必须存在

    SET PASSWORD FOR 'jeffrey'@'localhost' = 'auth_string';
  • 不使用 FOR user 子句,该语句将为当前用户设置密码

    SET PASSWORD = 'auth_string';

    任何使用非匿名帐户连接到服务器的客户端都可以更改该帐户的密码。(特别是,您可以更改自己的密码。)要查看服务器验证您的身份使用的帐户,请调用 CURRENT_USER() 函数

    SELECT CURRENT_USER();

如果给出 FOR user 子句,则帐户名称将使用 第 8.2.4 节,“指定帐户名称” 中描述的格式。例如

SET PASSWORD FOR 'bob'@'%.example.org' = 'auth_string';

如果省略帐户名称的主机名部分,则默认为 '%'

SET PASSWORD 将字符串解释为明文字符串,将其传递给与帐户关联的身份验证插件,并将插件返回的结果存储在 mysql.user 系统表中的帐户行中。(该插件有机会将值哈希到其期望的加密格式中。该插件可以使用指定的值,在这种情况下不会进行哈希。)

为指定的帐户设置密码(使用 FOR 子句)需要对 mysql 系统模式具有 UPDATE 权限。为自己设置密码(对于没有 FOR 子句的非匿名帐户)不需要任何特殊权限。

修改辅助密码的语句需要以下权限

  • APPLICATION_PASSWORD_ADMIN 权限是使用 RETAIN CURRENT PASSWORD 子句应用于您自己帐户的 SET PASSWORD 语句所必需的。该权限是操作您自己的辅助密码所必需的,因为大多数用户只需要一个密码。

  • 如果要允许帐户操作所有帐户的辅助密码,则应授予该帐户 CREATE USER 权限,而不是 APPLICATION_PASSWORD_ADMIN

read_only 系统变量启用时,SET PASSWORD 需要 CONNECTION_ADMIN 权限(或已弃用的 SUPER 权限),以及任何其他必需的权限。

有关设置密码和身份验证插件的更多信息,请参见 第 8.2.14 节,“分配帐户密码”第 8.2.17 节,“可插拔身份验证”