読者の方から私の著書のサンプルコードが「Linuxの環境で動かない」というご指摘を頂いていろいろ調べたところ、MySQLの匿名ユーザーが問題の原因であることが分かりました。この問題は原因を特定しにくいので、ここに整理して書いておきます。
MySQLは、インストールの仕方によってはデフォルトで匿名ユーザーが登録されます。匿名ユーザーとは、名前をもたないユーザーですが、厄介なのは「すべてのユーザーにマッチしてしまう」という性質があることです。たとえば、次のSQL文でMulderというユーザーを登録したとします。
問題が起こるのは、ローカルホストの匿名ユーザー''@'localhsot' がuserテーブルに存在する場合です。Mulderがローカルホストからログインしようとした場合、'Mulder'@'%'より先に''@'localhost'にマッチしてしまうため、匿名ユーザーと認識されてしまうのです。これを避けるには、GRANT文でMulderを登録する際にMulder@localhostとホスト名を含めるか、または匿名ユーザーを削除する必要があります。
セキュリティ的な面からも匿名ユーザーは削除しておいた方がよいでしょう。また、GRANT文でもホスト名を含めてユーザを指定しておいた方が(不確定要素が減るので)良いかも知れません。
MySQLは、インストールの仕方によってはデフォルトで匿名ユーザーが登録されます。匿名ユーザーとは、名前をもたないユーザーですが、厄介なのは「すべてのユーザーにマッチしてしまう」という性質があることです。たとえば、次のSQL文でMulderというユーザーを登録したとします。
GRANT ALL ON jamyto.* TO Mulder IDENTIFIED BY 'TrustNo1';
Mulderというユーザーのパスワードは TrustNo1 で jamyto というデータベースに対してすべての権限をもちます。MySQL上のuserテーブルには'Mulder'@'%'として登録されます。'%'は、「すべてのホスト」という意味です。問題が起こるのは、ローカルホストの匿名ユーザー''@'localhsot' がuserテーブルに存在する場合です。Mulderがローカルホストからログインしようとした場合、'Mulder'@'%'より先に''@'localhost'にマッチしてしまうため、匿名ユーザーと認識されてしまうのです。これを避けるには、GRANT文でMulderを登録する際にMulder@localhostとホスト名を含めるか、または匿名ユーザーを削除する必要があります。
セキュリティ的な面からも匿名ユーザーは削除しておいた方がよいでしょう。また、GRANT文でもホスト名を含めてユーザを指定しておいた方が(不確定要素が減るので)良いかも知れません。
投稿:竹形 誠司[takegata]/2008年 06月 22日 06時 27分
/更新:2008年 06月 22日 06時 33分