前回、gaucheからsqlを発行するのに、mysqlのドライバを使ったことを書きました。
で、接続をする際に、パスワードが使えないので、ログインユーザーのパスワードをnullに変更する必要がでてきちゃいました。
そこで今回、パスワードを変更する方法を調べました。
(というか、mysqlって、ユーザーのパスワードの有無を調節することができるんですね。
oracleってできたかなーと思いつつ、google先生で調べることに。)
質問・・・
質問に対する回答
そしてuserテーブルが有りますので、rootパスワードを更新してください。
update user set password=PASSWORD('NEW_PASSWORD') where user='root' and host='localhost';
flush privileges;
via:質問:ERROR 1045 (28000)について
なるほど、userテーブルにあるパスワードを変更すればいいんですね。
でも待てよ!!
どのデータベースにいるんだ、このテーブル??
と悩んでしまったので、とりあえず、rootでmysqlに接続し、前回調べたデータベース一覧の取得方法を使って、表示してみました。
で、3件くらい表示されたので、とりあえず、あやしいなーっと思った、「mysql」データベースに再度接続してみました。
接続後、テーブル情報を取得したら、なんとあるじゃないのー
「user」テーブルが!!
無事に見つかったので、パスワードをnullでupdateをかけて、gaucheから再度、mysqlに接続しようとしたら、またしてもエラー。
しかも、エラー内容が同じで、すでにパスワードも変更しているし、commitもかけてある。
(ちなみに、auto commitだったらしく、実行しても直接的な意味はなかったのですが。。。)
なんでかなーと思いつつ、先ほどの引用先をもうちょい進んでみると、
質問・・・
質問に対する回答
update文のhost部分は必要に応じてはずしてください
flush文を省略する場合は、mysqlを再起動してください。
flush privileges;
via:質問:ERROR 1045 (28000)について
「flush文??なにそれ??初めて聞いたぞ!!」(flush文については後述予定。)
と見事にflush文を発行していなかったので、一度、mysqlを再起動をかけてみたら、パスワード変更後の値(null)が無事に反映されて、gaucheからmysqlの接続ができました。
ここで重要なのは、ただupdate文を発行しただけじゃー意味がないということ。
flush文か再起動をかけないと反映されないのがポイントだね。
(しかし、なんでこういう仕様なのだろうか??パスワードがmysqlのサーバーにキャッシュされているということなのだろうが。。。うーん、難しい。)
0 コメント:
コメントを投稿