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