【问题标题】:How to set hashed password for MySQL database user如何为 MySQL 数据库用户设置哈希密码
【发布时间】:2020-05-29 13:46:09
【问题描述】:

我的老板希望我为我们的开发人员编写一个脚本来运行,该脚本将在他们的开发版本上创建一个新的数据库用户。他不希望我在代码中有实际密码;只有哈希。我有哈希密码,但是当我尝试使用该哈希密码创建用户时;它只是再次对哈希密码进行哈希处理。

CREATE USER 'test_user1'@'localhost' IDENTIFIED BY 'password'; 显示哈希密码是“*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19”

但如果我尝试... CREATE USER 'test_user2'@'localhost' IDENTIFIED BY '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19';

“密码”实际上不是我的 test_user2 密码。

我也尝试了以下UPDATE,但“密码”仍然不适用于 test-user2:

UPDATE `mysql`.`user` SET `authentication_string` = '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19' WHERE (`Host` = 'localhost') and (`User` = 'test_user2');

既然我已经知道散列值,如何防止它对我输入的值进行散列?

我还在测试中为两个用户运行了GRANT SELECT

【问题讨论】:

    标签: mysql password-hash


    【解决方案1】:

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

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

    文档的相关摘录:

    用 auth_plugin 识别为“auth_string”

    将账户认证插件设置为 auth_plugin 并存储 'auth_string' 值与 mysql.user 帐户行中的一样。如果插件 需要一个散列字符串,假设该字符串已经散列 插件需要的格式。

    【讨论】:

    • 天啊。就是这样。关键是使用AS 而不是BY。如果你使用BY,它仍然会散列它;如果您使用AS,它将使用您的哈希值。谢谢!!!
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-03-17
      • 2017-11-23
      • 1970-01-01
      • 2012-11-05
      • 1970-01-01
      • 1970-01-01
      • 2015-09-28
      相关资源
      最近更新 更多