mac miniのsnow leopardでMySQLを動かしていて、Windowsマシンから黒猫 SQL Studio Nextでデータを表示させようとしている場合のお話です。
まず、Windowsマシンで黒猫 SQL Studio Next(以下黒猫)を使って、snow leopardのDBに接続するには、ODBCによる接続が必要。ODBCで接続するには、MySQLへの接続ユーザー/パスワードが必要。
というわけで、目的のDBに接続できるMySQLユーザーを作成し、権限を与えてやった。
(まずrootでMySQLにログインした) mysql> grant select , insert, update , delete , drop , create on dbname.* to user1@'%' identified by 'password';
これで黒猫からselect, insert... ができるユーザー user1 が作成された。
上記コマンドの「%」は、ホストの指定なのだけど、「%」を指定することによって、どのホストでも黒猫を使ってselect, insert... ができることになる。
だから、localhost上でも同様にselect, insert... ができるよね?
と思いきや。
できん。できんのだ。localhost上、つまりはターミナルでログインした後に、selectやらが使われているスクリプトを実行できんのだ。スクリプト上はもちろん、コマンドラインからもMySQLユーザー user1 によるログインができんのだ。
$ mysql -u user1 -D dbname -p Enter password: ERROR 1045 (28000): Access denied for user 'user1'@'localhost' (using password: YES)
結論から言うと、localhostからもselect, insert... ができるようにgrantしてやらないといけない。
(まずrootでMySQLにログインした) mysql> grant select , insert, update , delete , drop , create on dbname.* to user1@'localhost' identified by 'password';
これで他マシンからの接続や、localhost上からのログインができるようになった。
$ mysql -u user1 -D dbname -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2522 Server version: 5.1.39 MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
■まとめ
他マシンからのアクセスでのAccess deniedを解決するには、grantを2回打つべし。*1
mysql> grant select , insert, update , delete , drop , create on dbname.* to user1@'%' identified by 'password'; mysql> grant select , insert, update , delete , drop , create on dbname.* to user1@'localhost' identified by 'password';
これでダメなら /etc/my.cnfのbind-address設定やら、Windowsのファイアウォールとかも見直せばいいかも。
これが解決するまで、いろいろと試しまくってこれまた3時間はロスしてしまった…。というかなんでMySQLはこんな仕様になってるのか誰か教えてエロい人。
*1:これが「イケてる」解決方法かどうかはともかく