2013-02-10

MySQLのユーザー作成や権限まわりのおさらいをした

MySQLのユーザーの作成方法や権限の設定方法がわからなかったので、おさらいをした。 その時のメモというかノート。

パスワードを設定する

rootでログインする必要がある

SET PASSWORD FOR ユーザー名@ホスト名=PASSWORD("パスワード");

# 具体例
SET PASSWORD FOR root@localhost=PASSWORD("****");

ユーザーの一覧を確認する

rootでログインした後、mysqlという名前のデータベースをuseする。その後以下のコマンドを実行する。

SELECT host, user, password from user;

※初期時の謎のユーザは何なのか? → よくわからないが、root以外は不要なので消したほうが良いらしい → 実際にlocalhost以外すべて削除したら今度はログインできなくなって詰んだ。とりあえず、rootではないユーザーを全て削除することにした。

FLUSH : キャッシュを消去する

MySQLが利用している内部キャッシュを消去するコマンド。 FLUSHを実行するにはRELOAD権限が必要。

「FLUSH PRIVILEGES」のコマンドを実行することで、データベースの権限テーブルから権限を再読み込みする。 user周りを変更した際はこのコマンドを実行することが推奨されているらしい。 ※ソースはここ

ユーザーの権限を確認する

SHOW GRANTS FOR ユーザー名@ホスト名;

# 具体例 : recruitユーザーの権限を確認する
SHOW GRANTS FOR recruit@localhost;

※ 「%」とは何か? %はワイルドカードなので、全てのホストを指すのだが、localhostだけは指さないらしい。

ユーザーを作成する

GRANT 権限 ON DB名.テーブル名 TO ユーザー名 IDENTIFIED BY "パスワード";

# 具体例
GRANT ALL PRIVILEGES ON recruit_development.* TO recruit IDENTIFIED BY "recruit";

ログインしているユーザーを確認する

SELECT current_user();

権限の一覧

http://dev.mysql.com/doc/refman/5.1/ja/privileges-provided.html を見ると、権限の全てが書かれている。色々な種類の権限があるが、まずは以下の権限あたりを抑えたいと思った。

  • CREATE
  • DROP
  • INSERT
  • SELECT
  • UPDATE
  • ALTER
  • DELETE
  • INDEX
  • TRIGGER
  • GRANT OPTION
  • REFERENCES
  • EVENT

また、これらの権限が付与されているかどうかは、「mysql」データベース内のuserテーブル等に書かれている。カラム名は「権限_priv」となっている(例えば、SELECT権限であれば、「Select_priv」となる)。 カラムの方は「ENUM」型である。