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権限を追加。

環境

Linux CentOS 5
MySQL 5.0.67-modified-log

*1:やその他記号?