我编译过&在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)
这在我的其他服务器上永远不会发生。似乎这个问题与操作系统有关。 哈希值如何相互不同? 谢谢!
答案 0 :(得分:0)
虽然MySQL文档在这个领域有点稀疏,但我认为它正在腌制密码。
为了安全起见,通常会在密码被散列之前将名为“salt”的随机值添加到密码中。使用salt,相同密码的结果哈希是非常不同的。
来自维基百科:
使用盐渍密码提供的好处是,如果盐足够大,则对存储的值进行查找表辅助字典攻击是不切实际的。也就是说,攻击者无法创建散列值(密码+盐)的预计算查找表(即彩虹表),因为它会占用太多空间。一个简单的字典攻击仍然是非常可能的,虽然它要慢得多,因为它无法预先计算。