me44.org

Top> 管理人のメモ帳

000003:MySQL rootパスワード設定にまつわる罠

使用バージョン:CentOS 5.1, MySQL Ver 14.12 Distrib 5.0.22
注意事項:
・あっしが見舞われた災難(これを知識不足と言われればそれまでだが)は、あっしのネットワーク構成に
 起因するのかも知れぬ(とあるプロバイダの固定IP1個割当サービス&DNSサーバはプロバイダ管理
 &IPマスカレード)。または/etc/hosts等のネットワーク関連設定ファイルの指定の仕方やらの問題かも。
 ただ、同じ災難に出くわしている御仁も少なくないと推察いたす。
・本ページでは、その災難の顛末についてのみ言及いたした。MySQLのインストール全般については、
 今回、参考にさせていただいた以下のページやリファレンス等を参照されたし。
参考1
参考2

事変勃発
MySQLのインストールを終え、意気揚々と、まずは手動でサービスを起動してみた。
# service mysqld start
MySQL データベースを初期化中: Installing all prepared tables
Fill help tables

To start mysqld at boot time you have to copy support-files/mysql.server
to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h xxx.yyy.zzz password 'new-password'
See the manual for more instructions.

You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &

You can test the MySQL daemon with the benchmarks in the 'sql-bench' directory:
cd sql-bench ; perl run-all-tests

Please report any problems with the /usr/bin/mysqlbug script!

The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
[ OK ]
MySQL を起動中: [ OK ]
#
ふむふむ、rootにパスワードを設定するのぢゃな・・・
# mysqladmin -u root password hogePassword  ※1
#
特に問題なし。んでわ、もう一丁。
# mysqladmin -u root -h xxx.yyy.zzz password hogePassword
mysqladmin: connect to server at 'xxx.yyy.zzz' failed
error: 'Host 'xxx' is not allowed to connect to this MySQL server'
#
んがああ、なんぢゃこりゃ?参考1によると、どうもxxx.yyy.zzzを127.0.0.1として定義する必要があるらすい。/etc/hostsを変更!
127.0.0.1 localhost.localdomain localhost xxx.yyy.zzz
此度はどうぢゃ?
# mysqladmin -u root -h xxx.yyy.zzz password hogePassword
mysqladmin: connect to server at 'xxx.yyy.zzz' failed
error: 'Access denied for user 'root'@'localhost' (using password: NO)'
まだ、駄目か・・・mysqladminは止めてdb接続して設定したほうがええのか?
# mysql -u root -p
Enter password: hogePassword
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 50 to server version: 5.0.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>
ふむ。とりあえず、つながったようぢゃ。以下でユーザアカウントとパスワード設定状況をみてみる。
mysql> select user,host,password from mysql.user;
+------+--------------+------------------+
| user | host | password |
+------+--------------+------------------+
| root | localhost | **************** |
| root | xxx.yyy.zzz |          |
|   | xxx.yyy.zzz |          |
|   | localhost  |          |
+------+--------------+------------------+
4 rows in set (0.01 sec)

mysql>
なるほど。※1のmysqladminコマンド成功したlocalhostのユーザにはパスワードが
設定されていて、xxx.yyy.zzzには設定されていない。以下の呪文を唱えて設定してみる
mysql> set password for root@'xxx.yyy.zzz'=password('hogePassword');
Query OK, 0 rows affected (0.00 sec)

mysql> select user,host,password from mysql.user;
+------+--------------+------------------+
| user | host | password |
+------+--------------+------------------+
| root | localhost | **************** |
| root | xxx.yyy.zzz | **************** |
|   | xxx.yyy.zzz |          |
|   | localhost  |          |
+------+--------------+------------------+
4 rows in set (0.00 sec)

mysql>
やれやれ、設定されたようぢゃて。
# mysql -u root -h 'xxx.yyy.zzz' -p
Enter password:hogePassword
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 62 to server version: 5.0.22

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> \q
Bye
#
ご注意:
どうも、localhost用のrootとxxx.yyy.zzz用のrootには同一パスワードにせんといかんようぢゃ。
これが元々そういう仕様なのか、ここで紹介した災難に見舞われたケースのみでの現象なのかは不明。
まったくもって釈然としないが、このまま使ってみて、問題なければ、了とするか・・・
付録:リモート接続確認のための仮ユーザ登録 DROP USERが本当にきれいに消してくれるかは未確認。
微かにバージョン違いだが・・・まあええぢゃろ
参考3
どこからでもアクセス可能な完全スーパーユーザの追加
mysql> GRANT ALL PRIVILEGES ON *.* TO tmpsuper@localhost IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO tmpsuper IDENTIFIED BY 'some_pass' WITH GRANT OPTION;
ユーザの削除
mysql> DROP USER tmpsuper@localhost, tmpsuper;


Copyright © me44.org All rights reserved