2011-06-29 7 views
3

パスワードを使用してlocalhostユーザーを作成し、すべてのテーブルにすべての権限を与えて削除すると、Arch LinuxでMySQL 5.5を使用しますパスワードを入力しなくてもそのユーザーとしてログインすることができます。再現するMySQLユーザーを削除すると、空のパスワードでそのユーザーとしてログインすることができます

ステップ:

# mysql -u root -h localhost -p 
    Enter password: <root password> 

mysql> create user 'test'@'localhost' identified by 'testing123'; 
mysql> grant all on *.* to 'test'@'localhost' identified by 'testing123'; 
mysql> select * from mysql.user where user='test'; 
     1 row in set (0.00 sec) 
mysql> exit 

# mysql -u test -h localhost -p 
    Enter password: testing123 

mysql> show databases; 
mysql> exit 

# mysql -u root -h localhost -p 
    Enter password: <root password> 

mysql> delete from mysql.user where user='test'; 
     Query OK, 1 row affected (0.00 sec) 
mysql> FLUSH PRIVILEGES; 
mysql> select * from mysql.user where user='test'; 
     Empty set (0.00 sec) 
mysql> exit 

# mysql -u test -h localhost 

mysql> (Why?) 

それだけではなく、「存在しない」テストユーザーがまだ同じ権限のすべてを行使することができます。主なセキュリティ問題。サーバーを再起動しても、パスワードなしでログインできます。

+0

' mysql.userから選択*ユーザーが表示されるかどうかそれは私のバグのように見えます。 –

+0

"Empty set(0.00 sec)"が表示されています(上記の手順で試したときと同じ結果になります) – OCDev

+0

MySQLを再起動しても、マシン全体を数回再起動しようとしました。すべての結果が同じです。 – OCDev

答えて

4

私は最終的に何が起こっていたのか把握しました。デフォルトでは、userテーブルには匿名のuser @ localhostがあります。このユーザーは、試行されたユーザー名と自動的に照合され、その匿名ユーザーとしてログインします。奇妙なもの、私は知っている。 rootとして匿名ユーザー、ログインを取り除くと、以下のコマンドを実行するには:; `再び今、あるルートと問題としてログインした場合、ユーザー=「テスト」のどこ

drop user ''@localhost; 
+2

はい、このページに記載されています:http://dev.mysql.com/doc/refman/5.1/en/default-privileges.html ** "クライアントがパスワードなしで匿名ユーザーとして接続しないようにするにはそれぞれの匿名アカウントにパスワードを割り当てるか、アカウントを削除する必要があります。** –

+0

ありがとうございます。パスワードを使用して作成したユーザーがパスワードを使用するときに許可されなかったが、パスワードなしで許可された別の問題を抱えていた。 anonユーザーを削除し、私はビジネスに戻っています。 – seeafish

関連する問題