如何为MySQL数据库用户设置哈希密码

5
我的老板希望我为我们的开发人员编写一个脚本,用于在他们的dev构建中创建新的数据库用户。他不想让我在代码中使用实际密码,只想要使用哈希值。虽然我有哈希后的密码,但是当我尝试使用哈希后的密码创建用户时,它只是再次对已经哈希过的密码进行了哈希。 CREATE USER 'test_user1'@'localhost' IDENTIFIED BY 'password'; 上面的代码显示哈希后的密码为“*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19”。
但是如果我尝试以下操作... CREATE USER 'test_user2'@'localhost' IDENTIFIED BY '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19'; “password”实际上不是我为test_user2设置的密码。
我还尝试了以下更新代码,但“password”仍不能用于test_user2: UPDATE `mysql`.`user` SET `authentication_string` = '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' WHERE (`Host` = 'localhost') and (`User` = 'test_user2'); 我应该如何防止它对我输入的值进行哈希,因为我已经知道了哈希值?
我还为我的测试运行了GRANT SELECT代码,用于两个用户。
2个回答

13

关键是使用 IDENTIFIED WITH mysql_native_password AS 'hash'。例如,考虑以下内容:

CREATE USER 'jeffrey'@'localhost'
  IDENTIFIED WITH mysql_native_password AS 'hash-goes-here';

文档相关摘录:

IDENTIFIED WITH auth_plugin AS 'auth_string'

将账户认证插件设置为auth_plugin,并将“auth_string”值原样存储在mysql.user账户行中。如果插件需要哈希字符串,则假定该字符串已经以插件所需的格式进行了哈希。


1
哦我的天啊。就是这个了。关键是要使用 AS 而不是 BY。如果你使用 BY,它仍然会进行哈希;如果你使用 AS,它将使用你的哈希值。谢谢! - Sherri Ross

0

我认为(可能有错误,不确定)实际上哈希被哈希多少次并不重要,它仍然代表相同的密码。因此,您可以在输入和MySQL哈希的输出上运行相同的哈希检查。


MySQL不会知道对用户的密码进行两次哈希,所以除非你打算为此编写自己的身份验证插件,否则我认为这是不现实的。 - Steen Schütt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接