はじめに
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)