MySQLで自分専用のユーザーを作って、必要最小限の権限を与える
CREATE DATABASE mydatabase; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,INDEX,DROP,LOCK TABLES ON mydatabase.* TO 'my-user'@'192.168.%.%' IDENTIFIED BY 'password'; GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,INDEX,DROP,LOCK TABLES ON mydatabase.* TO 'my-user'@localhost; GRANT FILE ON *.* TO 'my-user'@localhost;
既に色々と使われているmysqlに、自分で使うDATABASEを作成するなら、専用のユーザーも作っておきたいです。たとえ開発環境であっても$ mysql -u root
のまま使い続けると、何かミスした場合に他の人のデータを消したりとかしてしまわないとも限りません。
必要な権限
SELECT,INSERT,UPDATE,DELETE,CREATE,ALTER,INDEX,DROP,LOCK TABLES
とりあえず必要な権限というとこのくらいだと思います。ホスティングとかで与えられる権限も、このセットな事が多い気がします。CREATE TEMPORARY TABLES
とかは必要になったら、その都度GRANTする方向で。
Linuxユーザーと合わせる
mysqlが入ってるサーバーのユーザー名と同じものにすると、$ mysql
や$ mysql -p
だけで入れるようになって楽です。たまたま、Linuxユーザーにハイフンが入ってたので、シングルクォートで囲む必要がありました。ハイフン*1が無ければ、シングルクォートは要りません。
ローカルとリモートの両方からログインする
開発環境ですが、自分のPCとは別にサーバーがあるので、ローカルというのは開発用サーバーというケースです。自分のPCからMySQL Workbenchを使うには、リモートからもアクセスできる権限が必要になります。ちょっと面倒だけど、ローカルとリモートは別の設定になります。たとえまったく同じ権限でも、分けてGRANTしないとです。
せっかくだし開発環境なので、ローカルからのアクセスにはパスワード無しにしておきました。
DATABASE名(スキーマ名)にハイフンがある場合はバッククォート
さらに、作成したユーザに対して、特定スキーマのみに全権限を与えるようにする場合に、スキーマ名にハイフンが含まれている場合は、シングルクォートではなくバッククォートで括らなければなりません。
パスワード付きユーザを作成する時のTips - よかろうもん!
追記
2011/05/22 | ダンプ時にロックする事もあるので、LOCK TABLES 権限を追加。 |
2011/10/18 | csvをLOAD DATA INFILEで取り込んだりするので、FILE 権限を追加。 |
*1:やその他記号?