39
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

Organization

MySQL で特定の IP アドレスからのアクセスを許可する

はじめに

web サーバーから DB サーバーにアクセスを許可するときなど、MySQL で外部からのアクセスを許可したいときの設定あれこれを自分用にメモ。

おしながき

DB サーバーにログインして以下の作業を行っていきます。

  • MySQL の設定
  • MySQL で外部からのアクセス権を持ったユーザーの作成
  • firewall の設定

環境

OS: CentOS 7
MySQL: 5.7

MySQL の設定

必要に応じて my.conf を書き換えます。
なお、環境によって my.conf が保存されている場所が違うようです。
自分は /etc/my.cnf にありました。

【参考】my.cnfの場所を調べる

bind-address に接続したい IP アドレスを追加。

bind-address = 127.0.0.1
bind-address = 192.168.128.1(この行を追加)

もしくは bind-address をコメントアウトしてすべての IP アドレスを許可する。

# bind-address = 127.0.0.1

MySQL で外部からアクセスできるユーザーを作成

まずは root でログインします。

新しくユーザーを作成しますが、そのときにアクセスを許可する IP アドレスを指定します。

mysql> CREATE USER "sample"@"192.168.128.1" IDENTIFIED BY [password];

きちんと設定できているか確認してみます。

mysql> SELECT user, host FROM mysql.user

+---------------+-----------------+
| user          | host            |
+---------------+-----------------+
| sample        | 192.168.128.1   |
| mysql.session | localhost       |
| mysql.sys     | localhost       |
| root          | localhost       |
+---------------+-----------------+

sample ユーザーの host に 192.168.128.1 が設定されています。

次に、作成した sample ユーザーに 192.168.128.1 からアクセスできるよう権限を与えます。

mysql> GRANT ALL PRIVILEGES ON *.* TO "sample"@"192.168.128.1";

上記の例では、すべての権限をすべての DB に対して与えています。

firewall の設定

最後に、firewall で IP アドレスと MySQL を許可します。
なお、設定には sudo 権限が必要です。

まずは新しいゾーンを作成します。

$ firewall-cmd --new-zone=sampleZone --permanent
$ firewall-cmd --reload

次に、許可する IP アドレス(192.168.128.1/32)とサービス(MySQL)を指定します。

$ firewall-cmd --add-source=192.168.128.1 --zone=sampleZone --permanent
$ firewall-cmd --add-service=mysql --zone=sampleZone --permanent
$ firewall-cmd --reload

設定ができたら確認してみましょう。

$ firewall-cmd --list-all --zone=sampleZone

sampleZone (active)  # active であることを確認
  target: ACCEPT
  icmp-block-inversion: no
  interfaces: 
  sources: 192.168.128.1  # IP アドレスが追加されています
  services: mysql  # MySQLmysql
  protocols: 
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

アクセスしてみる

web サーバーから IP アドレスを指定して DB サーバーの MySQL にアクセスしてみます。

$ mysql -h 192.168.128.1 -u sample -p

これでログインできれば成功です。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
39
Help us understand the problem. What are the problem?