0

我已经在 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)

这在我的其他服务器上永远不会发生。似乎这个问题与操作系统有关。散列值如何彼此不同?谢谢!

4

1 回答 1

0

虽然 MySQL 文档在这方面有点稀疏,但我认为它是在对密码进行加盐处理。

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

来自维基百科:

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

于 2011-11-10T06:30:58.860 回答