俺だけのために Ore! Tips!

MySQL に外部のマシンから接続出来るようにする

2004年08月18日 作業

自宅の Win2K 上の「かねやん MySQLAdmin」から FreeBSD 上で動かしている MySQL への接続が出来ないので色々やってみた。

#まだ MySQL に馴れてないもんで色々頓珍漢なことをしてますが。

まずは root のパスワードを設定(デフォルトだと「パスワード無し」という危険な状況なんで)。

serv2# ls -la /usr/local/bin/mysqladmin
-rwxr-xr-x 1 root wheel 26287 Aug 17 07:03 /usr/local/bin/mysqladmin
serv2# /usr/local/bin/mysqladmin -u root password 'hogehoge'


serv2# /usr/local/bin/mysql -h 202.XXX.XXX.XXX -u root -p mysql
Enter password: <パスワード入力>
ERROR 1045: Access denied for user: 'root@fbsd5.netandfield.com' (Using password: YES)

ありり?
うまくいかないじゃん。

で、パスワード入れずに接続したらうまくいった・・・

serv2# /usr/local/bin/mysql -h 202.XXX.XXX.XXX -u root mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 9 to server version: 4.0.20

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

mysql> \s
--------------
/usr/local/bin/mysql Ver 12.22 Distrib 4.0.20, for unknown-freebsd5.2.1 (i386)

Connection id:          9
Current database:       mysql
Current user:           root@fbsd5.netandfield.com
SSL:                    Not in use
Current pager:          more
Using outfile:          ''
Server version:         4.0.20
Protocol version:       10
Connection:             202.XXX.XXX.XXX via TCP/IP
Client characterset:    ujis
Server characterset:    ujis
TCP port:               3306
Uptime:                 10 hours 35 min 4 sec

Threads: 1 Questions: 13 Slow queries: 0 Opens: 12 Flush tables: 1 Open tables: 6 Queries per second avg: 0.000
--------------

mysql>

なぜだぁ?

mysql> select host,user,password from mysql.user;
+-----------------------+------+------------------+
| host                  | user | password         |
+-----------------------+------+------------------+
| localhost             | root | 43d54a6e17b4d3e9 |
| fbsd5.netandfield.com | root |                  |
| localhost             |      |                  |
| fbsd5.netandfield.com |      |                  |
+-----------------------+------+------------------+
4 rows in set (0.00 sec)

ああ、mysqladmin で password 振ったのって、ホスト名を指定しなかったから localhost のユーザーにだけ振られたってこと?(つーか、localhost と fbsd5.netandfield.com は別ホスト扱いということか)

その前に、Windows 版を入れた時に「安全のため、まず匿名ユーザーを消せ」と某書籍にあったのを思い出した。
なので消す。↓

mysql> delete from mysql.user where user="";
Query OK, 2 rows affected (0.00 sec)

mysql> select host,user,password from mysql.user;
+-----------------------+------+------------------+
| host                  | user | password         |
+-----------------------+------+------------------+
| localhost             | root | 43d54a6e17b4d3e9 |
| fbsd5.netandfield.com | root |                  |
+-----------------------+------+------------------+
2 rows in set (0.01 sec)

これでOK。

そうそう。fbsd5.netandfield.com の root にも password を設定する。

mysql> set password for root@fbsd5.netandfield.com=password('hogehoge');
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user,password from mysql.user;
+-----------------------+------+------------------+
| host                  | user | password         |
+-----------------------+------+------------------+
| localhost             | root | 43d54a6e17b4d3e9 |
| fbsd5.netandfield.com | root | 43d54a6e17b4d3e9 |
+-----------------------+------+------------------+
2 rows in set (0.00 sec)

これで password 入れなきゃ駄目になったかな?試してみる。
まずは、password を入れないパターンで。

mysql> \q
Bye
serv2# /usr/local/bin/mysql -h 202.XXX.XXX.XXX -u root mysql
ERROR 1045: Access denied for user: 'root@fbsd5.netandfield.com' (Using password: NO)

おお、駄目。今度は password 入れて接続。

serv2# /usr/local/bin/mysql -h 202.XXX.XXX.XXX -u root mysql -p
Enter password: <パスワード入力>
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 17 to server version: 4.0.20

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

mysql>

OKじゃん。:-)

さて、外部から DB に接続させるには、ホスト名 %(ワイルドカード)のユーザーを登録しておかないといかんらしいことが判明。

mysql> insert into mysql.user (host, user, password) values('%', 'root', '');
Query OK, 1 row affected (0.00 sec)

mysql> select host,user,password from mysql.user;
+-----------------------+------+------------------+
| host                  | user | password         |
+-----------------------+------+------------------+
| localhost             | root | 43d54a6e17b4d3e9 |
| fbsd5.netandfield.com | root | 43d54a6e17b4d3e9 |
| %                     | root |                  |
+-----------------------+------+------------------+
3 rows in set (0.00 sec)

mysql> set password for root@'%'=password('hogehoge');
ERROR 1133: Can't find any matching row in the user table
mysql> delete from mysql.user where password='';
Query OK, 1 row affected (0.00 sec)

mysql> select host,user,password from mysql.user;
+-----------------------+------+------------------+
| host                  | user | password         |
+-----------------------+------+------------------+
| localhost             | root | 43d54a6e17b4d3e9 |
| fbsd5.netandfield.com | root | 43d54a6e17b4d3e9 |
+-----------------------+------+------------------+
2 rows in set (0.00 sec)

うまくいかなかったので消した。どうも、ver 4 からは、% ではなく空白でいいという噂も・・・

mysql> insert into mysql.user (host, user, password) values('', 'root', '');
Query OK, 1 row affected (0.00 sec)

mysql> select host,user,password from mysql.user;
+-----------------------+------+------------------+
| host                  | user | password         |
+-----------------------+------+------------------+
| localhost             | root | 43d54a6e17b4d3e9 |
| fbsd5.netandfield.com | root | 43d54a6e17b4d3e9 |
|                       | root |                  |
+-----------------------+------+------------------+
3 rows in set (0.00 sec)

しかし、↓password 設定出来ず。
根本的に間違っているようじゃのお。入門書を買う必要あり。

mysql> set password for root=password('hogehoge');
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user,password from mysql.user;
+-----------------------+------+------------------+
| host                  | user | password         |
+-----------------------+------+------------------+
| localhost             | root | 43d54a6e17b4d3e9 |
| fbsd5.netandfield.com | root | 43d54a6e17b4d3e9 |
|                       | root |                  |
+-----------------------+------+------------------+
3 rows in set (0.00 sec)

mysql> delete from mysql.user where password='';
Query OK, 1 row affected (0.00 sec)

mysql> select host,user,password from mysql.user;
+-----------------------+------+------------------+
| host                  | user | password         |
+-----------------------+------+------------------+
| localhost             | root | 43d54a6e17b4d3e9 |
| fbsd5.netandfield.com | root | 43d54a6e17b4d3e9 |
+-----------------------+------+------------------+
2 rows in set (0.00 sec)

mysql> \q
Bye

と思ってたら、わしの手元には「MySQL 徹底活用」という 3,200円(税別)もした高価な本が!!
それの「Chapter 3 ユーザー管理」あたりを眺めていたら分かったなり。
GRANT 文で登録してしまえば一番楽なのだね。

serv2# /usr/local/bin/mysql -h 202.XXX.XXX.XXX -u root mysql -p
Enter password: <パスワード入力>
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 19 to server version: 4.0.20

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

mysql> select host,user,password from mysql.user;
+-----------------------+------+------------------+
| host                  | user | password         |
+-----------------------+------+------------------+
| localhost             | root | 43d54a6e17b4d3e9 |
| fbsd5.netandfield.com | root | 43d54a6e17b4d3e9 |
+-----------------------+------+------------------+
2 rows in set (0.00 sec)

mysql> GRANT ALL PRIVILEGES ON *.* TO root IDENTIFIED BY 'hogehoge';
Query OK, 0 rows affected (0.00 sec)

mysql> select host,user,password from mysql.user;
+-----------------------+------+------------------+
| host                  | user | password         |
+-----------------------+------+------------------+
| localhost             | root | 43d54a6e17b4d3e9 |
| fbsd5.netandfield.com | root | 43d54a6e17b4d3e9 |
| %                     | root | 43d54a6e17b4d3e9 |
+-----------------------+------+------------------+
3 rows in set (0.00 sec)

mysql>

で、別のマシンの「かねやん MySQLAdmin」から接続してみたら、今度はばっちり接続出来たのだ。
これで、 DB の管理が楽になるぅ!!(セキュリティはちょっと甘くなるがねえ。TCPWrappers などとの組み合わせでどうにかするのであります)

ということで(結果:成功)なのである。





前ページに戻る


Copyright (C) 2004 S.Maaasamasa.