我在x86_64 linux服务器上编译并安装了MySQL5.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,但是失败了。
顺便说一句,如果我以这种方式更改根密码:
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)这在我的其他服务器上从来没有发生过。这个问题似乎与操作系统有关。散列的值怎么会彼此不同呢?谢谢!
发布于 2011-11-10 06:30:58
虽然MySQL文档在这方面有点稀疏,但我认为它是在对密码进行盐碱化。
为了安全起见,名为"salt“的随机值通常在密码被散列之前添加到密码中。对于salt,相同密码上的散列结果是非常不同的。
维基百科:
使用盐渍密码提供的好处是,如果salt足够大,则对存储的值进行查找表辅助字典攻击是不切实际的。也就是说,攻击者将无法创建一个由哈希值(密码+ salt)组成的预先计算的查找表(即彩虹表),因为这会占用太多的空间。简单的字典攻击仍然是非常可能的,尽管速度要慢得多,因为它不能预先计算。
。
https://stackoverflow.com/questions/8075670
复制相似问题