MySQL > ネットワーク経由のアクセスを許可する方法

更新日 2012-11-24
広告
ネットワーク経由のアクセスを許可するコマンドは、以下のフォーマットになります。
mysql> grant all privileges on データベース名.テーブル名 to ユーザ名@"クライアントアドレス" identified by 'パスワード' with grant option;
以下は、「rootユーザであればアクセスを許可する(パスワードはhogehoge)」という設定です。
mysql> grant all privileges on *.* to root@'%' identified by 'hogehoge' with grant option;
Query OK, 0 rows affected (0.00 sec)
データベース名とテーブル名は、ワイルドカード(*)を指定しています。また、クライアントアドレスも、ワイルドカード(%)を指定しています。
クライアント'example.com'から、データベースtestdbに対するアクセスのみを許可する場合は、以下のようになります。
mysql> grant all privileges on testdb.* to root@"example.com" identified by 'hogehoge' with grant option;
ちなみに、パスワード認証が必要なければ、identified以下は必要ありません。
クライアントアドレスには、ネットワークアドレスを指定することもできます。例えば、192.168.1.0/24のアドレス群からのアクセスを許可する場合は、'192.168.1.%' と設定すればよいです。
mysql> grant all privileges on testdb.* to root@"192.168.1.%" identified by 'hogehoge' with grant option;
最後に、上記コマンドで設定した権限を有効にする必要があります。
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
ちなみに、MySQLはデフォルトで mysql という名前のデータベースを持っています。その中の User テーブルを参照することで、パスワードの設定を確認できます。
上記の設定を行っても、ネットワーク経由でアクセスできない場合は、まず、telnetでアクセスしてみましょう。
$ telnet 192.168.0.100 3306
Trying 192.168.0.100
telnet: Unable to connect to remote host: Connection refused
192.168.0.100は、MySQLサーバのアドレスです。上記のようにアクセスが拒否されるならば、MySQLのポート(3306)が、外部ネットワークに対して公開されていません。
RedHatやCentOSの場合、iptablesでパケットがフィルタリングされていないか、確認しましょう。また、設定ファイル(/etc/mysql/my.cnf など)の、bind-address 項目の値で、制限している可能性があります。
#bind-address            = 127.0.0.1
bind-address            = 0.0.0.0
上記のように、0.0.0.0 にすると、アドレスによる制限は無くなります。セキュリティに注意して設定してください。
広告
お問い合わせは sweng.tips@gmail.com まで。
inserted by FC2 system