2009/06/10

[mysql]ユーザーのパスワードを変更

前回、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 コメント:

コメントを投稿