Monday, May 6, 2013

MySQLの権限設定について


DBMSについてはずぶの素人の告白…というか、メモということで。
(たぶん誤解が入っているはずなので、ご指摘いただけると幸いです...)

さて、自分が使っているソフトが制御データを永続化するためにRDBMSを使っていることも多いと思う。
ご多分にもれず、自分がいじっているOpenStackの各種サービスくんたちもRDBMS(通常はMySQL)に依存しまくりである。

で、まず最近ようやく気が付いたのだが、GRANT を使ってユーザに対してアクセス権を与える時の以下のような注意がある(らしい。なにか誤解があるような気がするのだが...)

まず、

  mysql> create database mydb;

データベースを作るのはいいとして、ユーザ作成/アクセス権限を付与する時に

  mysql> grant all privileges on mydb.* to 'user1'@'%' identified by 'PASSWORD';

としただけでは、実は localhost は含まれないので、localhost(127.0.0.1)でアクセスする可能性もあるなら

  mysql> grant all privileges on mydb.* to 'user1'@'locahost' identified by 'PASSWORD';

も必要というのが1つ。

さらに、ここから誤解が入っている気がしてならないのだが、
上記ではアクセス権は細粒度でやったほうがいいかな?ということで、
データベース名 mydb を指定し、データベース単位での権限を設定しているつもり。

この場合、

  mysql> use mysql
  mysql> select * from mysl.user where user='user1'\G;

とかしてみると、権限が軒並み N になっているのが気になるのだが、
自ホストから(localhost ではなくて) IP やホスト名でアクセスできない。

…ので、上述の grant 文2行に加えて、

  mysql> grant all privileges on mydb.* to 'user1'@'DB_HOST_NAME' identified by 'PASSWORD';

が必要になる。
DB_HOST_NAME は MySQL がまさに動作しているホストのホスト名である。

一方、grant 文の 'on DB_NAME.TABLE_NAME' を指定する際に '*.*' とすると
データベース単位から(MySQLインスタンス内)グローバルになるわけだが、
権限が軒並み Y に変わり、アクセスできるようになる。


さて、何が足りない(or 誤解な)のだろう?

追記
バージョンは、古いのだけど CentOS6.4/EPEL6付属の MySQL 5.1系の話。

No comments:

Post a Comment