如何使用预散列密码设置 MySQL 用户的密码?
我有一个 MySQL 5.1.73 数据库服务器。
根据 MySQL 文档,在较新版本的 MySQL 中,使用预散列密码创建用户如下:
CREATE USER 'ans'@'localhost'
IDENTIFIED BY PASSWORD 'hash_string'
已弃用并将在未来的 MySQL 版本中删除。
但是,我不知道有什么新方法(如果有的话)可以实现这一目标。
我们用皮匠设置我们的数据库,我想预先将他们需要的账户以及他们将使用的密码填充到我的数据库中,而无需在我的脚本中使用明文密码。我原本以为这样做就可以了:
update mysql.user
set password = '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB'
where user = 'ans';
但经我的测试,这实际上并没有改变 MySQL 登录密码。
mysql> create user 'ans'@'localhost' identified by 'foo';
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| ans | localhost | *F3A2A51A9B0F2BE2468926B4132313728C250DBF |
+------+-----------+-------------------------------------------+
mysql> update mysql.user set password = password('bar') where user = 'ans';
Query OK, 1 row affected (0.00 sec)
mysql> select user,host,password from mysql.user;
+------+-----------+-------------------------------------------+
| user | host | password |
+------+-----------+-------------------------------------------+
| ans | localhost | *E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB |
+------+-----------+-------------------------------------------+
mysql> quit
$ mysql -uans -pbar
ERROR 1045 (28000): Access denied for user 'ans'@'localhost' (using password: YES)
$ mysql -uans -pfoo
Welcome to the MySQL monitor. Commands end with ; or \g.
答案1
当你破解密码时mysql.user
,你应该运行
mysql> FLUSH PRIVILEGES;
特权
从 mysql 数据库中的授权表重新加载权限。
服务器会将 GRANT、CREATE USER、CREATE SERVER 和 INSTALL PLUGIN 语句的结果信息缓存在内存中。相应的 REVOKE、DROP USER、DROP SERVER 和 UNINSTALL PLUGIN 语句不会释放这些内存,因此对于执行许多导致缓存的语句实例的服务器,内存使用量会增加。可以使用 FLUSH PRIVILEGES 释放这些缓存的内存。
现在,您必须重新启动 MySQL 才能使密码生效。
答案2
现在有点旧了,但是为了将来参考,使用命令SHOW CREATE USER 'ans'@'localhost'
你可以看到新的语法形式为:
CREATE USER 'ans'@'localhost' IDENTIFIED WITH 'mysql_native_password' AS '*E8D46CE25265E545D225A8A6F1BAF642FEBEE5CB' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT