MySQLのこと。

MySQLのことについてまとめているブログ。他人に見せる用でもなく、自分の勉強備忘録。検索インデックスも外してるので、辿りついた方・・・ようこそ。そんな大した情報ないですよ?!たまにアルゴリズムの練習も

MySQLの権限に関するまとめ

はじめに

MySQLの権限についてまとめる。

MySQLの権限

MySQLの主な権限一覧は下記の通りである。分析者が必要とするであろう権限については太字で表記。また、権限の詳細は13.7.1.4 GRANT 構文を参照。

権限 内容
alter alter文の実行を許可。
create データベースとテーブルの作成を許可。
create temporary tables テンポラリテーブルの作成を許可。
delete delete文の実行を許可。
drop データベースとテーブルの削除を許可。
file load data文、select * into outfile文の実行を許可。
index インデックスの作成・削除を許可。
insert insert文の実行を許可。
lock tables lock tables文の実行を許可。
select select文の実行を許可。
show databases show databases文の実行を許可。
trigger create trigger文の実行を許可。
update update文の実行を許可。
----- -----
execute ストアドプロシージャーの実行を許可。
create routine ストアドプロシージャーの作成を許可。
alter routine ストアドプロシージャーの変更を許可。
----- -----
create view ビューの作成を許可。
show view ビューの参照を許可。
----- -----
all privileges 全権限を許可。
grant option 他のユーザーの権限変更を許可。
create user ユーザーの作成を許可。
proxy LDAPなどの外部機構を使ったユーザー認証を許可。
----- -----
event イベントスケジューラーの利用を許可。

グローバル権限とデータベース権限

MySQLの権限には、グローバル権限とデータベース権限。名前の通り権限をどこまでの範囲で適用させるかによって使い分ける。テーブル権限やカラム権限、プロキシユーザー権限などもあるがここでは触れない。

グローバル権限

グローバル権限は管理権限であり、特定のサーバー上のすべてのデータベースに適用される。

mysql> GRANT ALL ON *.* TO 'someuser'@'somehost';
mysql> GRANT SELECT, INSERT ON *.* TO 'someuser'@'somehost';

データベース権限

データベース権限は、特定のデータベース内のすべてのオブジェクトに適用される。

GRANT ALL ON mydb.* TO 'someuser'@'somehost';
GRANT SELECT, INSERT ON mydb.* TO 'someuser'@'somehost';

権限の付与

権限の付与は、create userでユーザーを作って付与することになる。ここではユーザーtest_user001を作成し、ecデータベースに対するデータベース権限を付与する。CREATE USER <hoeg>@111111と指定すればipアドレスなども制限できる。ここではrootで作業しているが、通常は内容に応じてユーザーと権限を作成することになる。

mysql> CREATE USER 'test_user001' IDENTIFIED BY '**********';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| test_user001     | %         |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

mysql> GRANT ALL ON ec.* TO 'test_user001';
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR 'test_user001';
+------------------------------------------------------+
| Grants for test_user001@%                            |
+------------------------------------------------------+
| GRANT USAGE ON *.* TO `test_user001`@`%`             |
| GRANT ALL PRIVILEGES ON `ec`.* TO `test_user001`@`%` |
+------------------------------------------------------+
2 rows in set (0.00 sec)

権限を剥奪する場合はrevokeでユーザーと剥奪する権限を指定する。

mysql> revoke CREATE VIEW on ec.* from 'test_user001';
Query OK, 0 rows affected (0.00 sec)

mysql> SHOW GRANTS FOR 'test_user001';
+-----------------------------------------------------+
| Grants for test_user001@%                           |
+-----------------------------------------------------+
| GRANT USAGE ON *.* TO `test_user001`@`%`            |
| GRANT SELECT, ALTER ON `ec`.* TO `test_user001`@`%` |
+-----------------------------------------------------+
2 rows in set (0.00 sec)

全ての権限を剥奪するには、下記のコマンドを実行する。

mysql> revoke all, grant option from 'test_user001';
Query OK, 0 rows affected (0.01 sec)

mysql> SHOW GRANTS FOR 'test_user001';
+------------------------------------------+
| Grants for test_user001@%                |
+------------------------------------------+
| GRANT USAGE ON *.* TO `test_user001`@`%` |
+------------------------------------------+
1 row in set (0.00 sec)

不要なユーザーの削除はdrop userを実行する。一覧からtest_user001が削除されていることが確認できます。

mysql> drop user 'test_user001';
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT user, host FROM mysql.user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)

参考文献