自宅の 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 などとの組み合わせでどうにかするのであります)
ということで(結果:成功)なのである。
|
|