【问题标题】:hash value different between mysqladmin and password() funcitonmysql admin和password()函数之间的哈希值不同
【发布时间】:2011-11-10 06:19:01
【问题描述】:

我已经在 x86_64 linux 服务器上编译并安装了 mysql-5.1.59。

首先我在cli中设置root密码并登录:

$ bin/mysqladmin -uroot password 'somepass'
$ bin/mysql -uroot -p 'somepass'
mysql>

登录成功!

然后我使用 SQL 语句创建了一个用户:

mysql> grant all privileges on mydb.* to 'myuser'@'localhost' identified by 'somepass';
mysql> flush privileges;

密码与root完全相同。

但经过我的查询:

mysql> select host,user,password from mysql.user;

我注意到两个帐户的密码值不一样。 我尝试使用 myuser 登录 mysql 但失败了。

顺便说一下,如果我这样更改root密码:

mysql> update mysql.user set password=PASSWORD('somepass') where user='root';
mysql> flush privileges;

那我就不能用root登录mysql了:

$ bin/mysql -uroot -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

这在我的其他服务器上从未发生过。似乎这个问题与操作系统有关。 散列值之间如何不同? 谢谢!

【问题讨论】:

    标签: mysql linux mysql-management mysqladmin


    【解决方案1】:

    虽然 MySQL 文档在这方面的内容有点少,但我认为它是在加密密码。

    为了安全起见,通常在对密码进行哈希处理之前将一个名为“salt”的随机值添加到密码中。使用盐,相同密码的结果哈希是非常不同的。

    来自维基百科:

    如果盐足够大,使用加盐密码的好处是使查找表辅助字典攻击对存储的值不切实际。也就是说,攻击者将无法创建散列值(密码+盐)的预计算查找表(即彩虹表),因为它会占用太多空间。一个简单的字典攻击仍然是很有可能的,虽然速度要慢得多,因为它不能预先计算。

    【讨论】:

    • 问题中提到的两种方法似乎都使用了不同的盐。
    • 好吧,终于证明是我的错...我的密码中有一个反斜杠,我忘记在 SQL 语句中对其进行转义...
    • 如果您使用加盐密码,则每个密码都有唯一的加盐。同样,我不知道这是否是 MySQL 密码的工作方式,但我很高兴你的问题得到了解决。
    猜你喜欢
    • 2012-05-20
    • 1970-01-01
    • 2023-02-19
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 2020-07-18
    • 1970-01-01
    • 2018-08-24
    相关资源
    最近更新 更多