はじめに
MySQLで新しくユーザを作っても、そのユーザには何の権限も与えられていないため、データベースにもアクセスするどころか、MySQLシェルにアクセスすることさえできない。そこで、GRANT
文を用いてユーザに権限を与える。
構文
mysql> GRANT {type_of_permission} ON {database_name}.{tablename} TO {username}@localhost;
ユーザー権限の種類
上記のコードの{type_of_permission}
に入力する部分。よく使われるものを表にまとめてみた。
権限 | 説明 |
---|---|
ALL (PRIVILEGES) | 指定したデータベースにフルアクセスできる。(データベースが指定されていない場合は、システム全体のグルーバルアクセスができる。) |
ALTER | テーブルを変更できる。 |
CREATE | 新しいテーブルまたはデータベースを作成できる。 |
DROP | テーブルまたはデータベースを削除できる。 |
DELETE | テーブルから行を削除できる。 |
INSERT | デーブルに行を挿入できる。 |
SELECT | SELECT コマンドを実行してデータベースを読み取ることができる。 |
UPDATE | テーブルの行を更新できる。 |
GRANT OPTION | 他のユーザーの権限の付与または削除ができる。 |
USAGE | 権限が無いことを指す。GRANT 文では使わないが、権限のないユーザの情報を確認したときに表示される。 |
権限のレベル
ユーザーの権限のレベルには主に、グローバルレベル、データーベースレベル、テーブルレベルがある。権限の範囲は、グローバルレベル>データーベースレベル>テーブルレベルとなっている。
各レベルの設定の仕方
グローバルレベル
mysql> GRANT {type_of_permission} ON *.* TO {username}@ localhost;
データベースレベル
mysql> GRANT {type_of_permission} ON {database_name}.* TO {username}@ localhost;
テーブルレベル
mysql> GRANT {type_of_permission} ON {database_name}.{tablename} TO {username}@ localhost;
お気づきのように、
*
で任意のデータベースorテーブルを指定することができる。
実践
1. MySQLに管理者ユーザとしてログインする
$ mysql -u -root -p
2. ユーザーnew_user
にデータテーブルsample_db
における(GRANT OPTION
と PROXY
を除く)全ての権限を与える。
mysql> GRANT ALL ON sample_db.* TO new_user@localhost
3. すべての権限をリロード
mysql> FLUSH PRIVILEGES;
注意
これを忘れると、設定の変更が反映されない!
4. 権限が与えらているか確認する
mysql> SHOW GRANTS FOR new_user@localhost; +------------------------------------------------------------------+ | Grants for new_user@localhost | +------------------------------------------------------------------+ | GRANT USAGE ON *.* TO 'new_user'@'localhost' | | GRANT ALL PRIVILEGES ON `sample_db`.* TO 'new_user'@'localhost' | +------------------------------------------------------------------+ 2 rows in set (0.00 sec)
権限を取り消したい場合
REVOKE {type_of_permission} ON {database_name}.{table_name} FROM {username}@localhost;
注意
ユーザーを指定するには権限を付与するときに使用したTOではなく、FROMを使用する必要がある