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;

2 つのアカウントのパスワード値が同じではないことに気付きました。そして、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)

これは私の他のサーバーでは決して起こりません。問題はOSに関係しているようです。ハッシュ値はどのように互いに異なるのでしょうか? ありがとう!

4

1 に答える 1

0

MySQL のドキュメントはこの分野では少しまばらですが、パスワードがソルト化されていると思います。

セキュリティのために、通常、「ソルト」と呼ばれるランダムな値が、ハッシュされる前にパスワードに追加されます。ソルトを使用すると、同じパスワードで得られるハッシュは大きく異なります。

ウィキペディアから:

ソルト化されたパスワードを使用することによって得られる利点は、ソルトが十分に大きい場合、保存された値に対するルックアップ テーブル支援辞書攻撃を非現実的にすることです。つまり、攻撃者は、ハッシュ値 (パスワード + ソルト) の事前計算されたルックアップ テーブル (つまり、レインボー テーブル) を作成できません。単純な辞書攻撃の可能性は依然として非常に高いですが、事前に計算できないため速度は大幅に低下します。

于 2011-11-10T06:30:58.860 に答える