13.7.1.7 SET PASSWORD 语句
SET PASSWORD [FOR user] = password_option
password_option: {
'auth_string'
| PASSWORD('auth_string')
}
SET PASSWORD语句为 MySQL 用户帐户分配密码。 'auth_string'
代 table 明文(未加密)密码。
Note
-
从 MySQL 5.7.6 开始不推荐使用设置密码... =密码('auth_string')语法,并且在将来的 MySQL 版本中将删除该语法。
-
不建议使用设置密码... ='auth_string'语法,但是ALTER USER是帐户更改(包括分配密码)的首选语句。例如:
ALTER USER user IDENTIFIED BY 'auth_string';
Important
在某些情况下,SET PASSWORD可能会记录在服务器日志中或 Client 端的历史记录文件(例如~/.mysql_history
)中,这意味着任何具有对该信息的读取权限的人都可以读取明文密码。有关服务器日志发生这种情况的条件以及如何控制它的信息,请参阅第 6.1.2.3 节“密码和日志记录”。有关 Client 端日志记录的类似信息,请参见第 4.5.1.3 节“ mysqlClient 端记录”。
SET PASSWORD可以与是否有明确命名用户帐户的FOR
子句一起使用:
- 该语句使用
FOR user
子句设置命名帐户的密码,该密码必须存在:
SET PASSWORD FOR 'jeffrey'@'localhost' = 'auth_string';
- 没有
FOR user
子句,该语句设置当前用户的密码:
SET PASSWORD = 'auth_string';
使用非匿名帐户连接到服务器的任何 Client 端都可以更改该帐户的密码。 (特别是,您可以更改自己的密码.)要查看服务器将您用作身份验证的帐户,请调用CURRENT_USER()函数:
SELECT CURRENT_USER();
如果给出了FOR user
子句,则帐户名使用第 6.2.4 节“指定帐户名”中描述的格式。例如:
SET PASSWORD FOR 'bob'@'%.example.org' = 'auth_string';
帐户名的主机名部分(如果省略)默认为'%'
。
为命名帐户(带有FOR
子句)设置密码需要mysql
系统数据库的UPDATE特权。为自己设置密码(对于没有FOR
子句的非匿名帐户)不需要任何特殊权限。启用read_only系统变量后,SET PASSWORD除了其他必需的特权外,还需要SUPER特权。
可以通过以下方式指定密码:
- 使用不带PASSWORD()的字符串
SET PASSWORD FOR 'jeffrey'@'localhost' = 'password';
SET PASSWORD将字符串解释为明 Literals 符串,并将其传递给与该帐户关联的身份验证插件,并将该插件返回的结果存储在mysql.user
系统 table 的帐户行中。 (为插件提供了将值散列为所需的加密格式的机会.插件可以使用指定的值,在这种情况下,不会发生散列.)
- 使用PASSWORD()函数(自 MySQL 5.7.6 起不推荐使用)
SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('password');
PASSWORD()参数是明文(未加密)密码。 PASSWORD()散列密码并返回加密的密码字符串,以存储在mysql.user
系统 table 的帐户行中。
PASSWORD()函数使用由old_passwords系统变量值的值确定的哈希方法对密码进行哈希处理。确保old_passwords具有与该帐户关联的身份验证插件所期望的哈希方法相对应的值。例如,如果帐户使用mysql_native_password
插件,则old_passwords值必须为 0:
SET old_passwords = 0;
SET PASSWORD FOR 'jeffrey'@'localhost' = PASSWORD('password');
如果old_passwords的值与身份验证插件所需的值不同,则PASSWORD()返回的哈希密码值将不能被插件使用,并且不会进行 Client 端连接的正确身份验证。
下 table 显示了每种密码哈希方法的许可值old_passwords
以及哪些身份验证插件使用该哈希方法。
密码哈希方法 | old_passwords Value | 关联身份验证插件 |
---|---|---|
MySQL 4.1 本机哈希 | 0 | mysql_native_password |
SHA-256 hashing | 2 | sha256_password |
有关设置密码和身份验证插件的其他信息,请参见第 6.2.10 节“分配帐户密码”和第 6.2.13 节“可插入身份验证”。