mysqlでのアクセス制御まとめ

MySQL のアクセス制御に関する事項を整理してみました。

たとえばWebサーバ(apache,tomcat等)とDBサーバ(MySQL)を分離する場合等に参考になるかと思います。

IPアドレスベースでのアクセス制御

設定ファイル

  • /etc/mysql/my.cnf
  • /etc/hosts.allow と /etc/hosts.deny (ただし tcp wrapper を使っている場合のみ。詳細は後述)
例1) どこからでもアクセス可能にする場合

/etc/mysql/my.cnf

bind-address = 0.0.0.0

/etc/hosts.allow

mysqld: *
例2) 192.168.1.0/24 からのみ接続可能にする場合

/etc/mysql/my.cnf

bind-address           = 0.0.0.0

/etc/hosts.allow

mysqld: 192.168.1. 

/etc/hosts.deny

ALL: ALL

/etc/hosts.allow は mysqld が tcp wrapper を使っている場合のみ参照されます。tcp wrapper を使っているかどうかを調べるには、コマンドラインで以下のコマンドを実行します。

$ ldd /usr/sbin/mysqld

tcp wrapper を使っている場合は、以下のような libwrap を含む行が出力されます。つまりこの場合は /etc/hosts.allow の内容が有効になります

 libwrap.so.0 => /lib/libwrap.so.0

ユーザ認証によるアクセス制御

ユーザの追加

データベースへのアクセス権限を与える場合には

GRANT ALL PRIVILEGES ON データベース名.* TO ユーザ名 IDENTIFIED BY 'パスワード' 
GRANT ALL PRIVILEGES ON データベース名.* TO ユーザ名@ホスト名 IDENTIFIED BY 'パスワード' 

とします。

ホスト名にはワイルドカードとして"%" が使えます。 たとえば

  • user@"%"
  • user@192.168.1."%"

と書きます

細かい制御方法については、マニュアル*1を見ましょう

ユーザの削除

REVOKE ALL PRIVILEGES FROM ユーザ名

詳細は、マニュアル*2を見ましょう