Rails でアプリケーションの初期化はこんな感じになると思います。
% rails new hoge -d mysql % cd hoge % mysql -uroot -p mysql> create user hoge@localhost identified by 'abcdefg'; mysql> grant all on hoge_development.* to hoge@localhost; mysql> grant all on hoge_test.* to hoge@localhost; % vi config/database.yml development: 〜 username: hoge password: abcdefg 〜 test: 〜 username: hoge password: abcdefg % rake db:create
で、rake db:create はこんなクエリで hoge_development と hoge_test データベースを作ってます。
CREATE DATABASE `hoge_development` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci` CREATE DATABASE `hoge_test` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci`
ここで config/database.yml に記述するユーザー名やパスワードを間違えてしまったとします。
すると何故か MySQL の root のパスワードを聞いてきます。
% rake db:create Access denied for user 'hoge'@'localhost' (using password: YES). Please provide the root password for your mysql installation >
ここで素直に root のパスワードを入力すると、なんとパスワードが config/database.yml に書いたものに変更されてしまいます(ユーザー名が誤っていた場合はそのユーザーが MySQL に登録されます)!!
これはひどい!!
その時のクエリはこんな感じです。
CREATE DATABASE `hoge_development` DEFAULT CHARACTER SET `utf8` COLLATE `utf8_unicode_ci` GRANT ALL PRIVILEGES ON hoge_development.* TO 'hoge'@'localhost' IDENTIFIED BY 'abcdefg' WITH GRANT OPTION
ご丁寧に GRANT OPTION までついています。これを付けられたユーザーは自分の持っている権限を他の MySQL ユーザーに付与することができるようになります。パスワードが変更されるだけでなく、こんな余計な権限をつけるとは…。
そういうわけで、rake db:create が root のパスワードを要求した時には Ctrl-C で止めて config/database.yml を見直すのが良いと思います。