"BOKU"のITな日常

BOKUが勉強したり、考えたことを頭の整理を兼ねてまとめてます。

MariaDB(MySQL)のGRANTで付与できる権限一覧を整理

f:id:arakan_no_boku:20211207220619p:plain

目次

GRANT文

GRANT文はアカウントに権限(Privilege)を与えるために使います。

今回はGRANTで扱う権限(Privilege)に絞って整理します。

権限の割り当ては、たまにしかしないので、毎回忘れてて難儀します。

なので、自分の備忘的にまとめておくのが目的です。

 

GRANTで付与できる権限レベル一覧

権限にはレベルがあって、レベルによって格納されているテーブルが違います。

権限レベル 説明 格納テーブル
グローバルレベル(G) 全てのデータベースに適用 mysql.user
データベースレベル(D) 特定のデータベース内の全てのオブジェクトに適用 mysql.db
テーブルレベル(T) 特定のテーブル内の全てのカラムに適用 mysql.tables_priv
カラムレベル(C) 特定テーブル内の単一カラムに適用 mysql.columns_priv
ルーチンレベル(R) ストアドルーチンに適用(ファンクションとプロシージャ) mysql.procs_priv
プロキシユーザー権限(P) あるユーザーが別のユーザーの代理になることができる mysql.proxies_priv

とはいえ、普通に意識するのは「データベースレベル」だけで、「グローバルレベル」の権限を持つのはrootユーザくらいのはずです。

 

GRANTで付与できる権限の一覧

前記の権限レベルによって、付与可能な権限があります。

その一覧とレベルとの対応付けは以下のような感じです。

権限 G D T C R P 意味
ALTER       テーブルの変更を可能にします。
ALTER ROUTINE       ストアドルーチンの変更、削除を可能にします。
CREATE       データベース、テーブルの作成を可能にします。
CREATE ROLE           ロールの作成を可能にします。
CREATE ROUTINE         ストアドルーチンの作成を可能にします。
CREATE TABLESPACE           テーブルスペースとロググループの作成、変更、削除を可能にします。
CREATE TEMPORARY TABLES         CREATE TEMPORARY TABLE の使用を可能にします。
CREATE USER           CREATE USER 、 DROP USER 、 RENAME USER 、 REVOKE ALL PRIVILEGES の使用を可能にします。
CREATE VIEW       ビューの作成と変更を可能にします。
DELETE       データベース、テーブル、ビューの削除を可能にします。
DROP       テーブルの削除を可能にします。
DROP ROLE           ロールの削除を可能にします。
EVENT         イベントの利用を可能にします。
EXECUTE       ストアドルーチンを起動させるのを可能にします。
FILE           SELECT ... INTO OUTFILE と LOAD DATA INFILE の使用を可能にします。
GRANT OPTION   権限の付与とを削除を可能にします。
INDEX       インデックスの作成と削除を可能にします。
INSERT     INSERTの使用を可能にします。
LOCK TABLES         LOCK TABLES の使用を可能にします。
PROCESS           SHOW FULL PROCESSLIST の使用を可能にします。
PROXY             PROXYの使用を可能にします。
REFERENCES     外部キーの作成を可能にします。
RELOAD           FLUSH の使用を可能にします。
REPLICATION CLIENT           スレーブとマスタの場所を問い合わせることを可能にします。
REPLICATION SLAVE           複製スレーブを可能とします。
SELECT     SELECT の使用を可能にします。
SHOW DATABASES           SHOW DATABASES の使用を可能とします。
SHOW VIEW       SHOW CREATE VIEWの使用を可能にします。
SHUTDOWN           mysqladmin shutdown の使用を可能にします。
SUPER           CHANGE MASTER TO 、 KILL 、 PURGE BINARY LOGS 、 SET GLOBAL 、mysqladmin debug command の使用を可能にします。
TRIGGER       トリガの作成と削除を可能にします。
UPDATE     UPDATE の使用を可能にします。
DELETE HISTORY         システムバージョンのテーブルからのHISTORYの削除を可能にします。

 

サンプル的に付与して試してみる

とりあえず、ユーザを作って、GRANTをALLでかけてみて、どの権限が付与されて、どれが付与されないのかを確認してみることにします。

rootでログインし、登録済のユーザを一覧して、被らないユーザ名を適当に決めます。

select host,user from mysql.user;

今回は「gratest」というユーザを作ることにします。

とりあえず「localhost」で。

create user 'gratest'@'localhost' identified by 'grapass';

この時点では当然ながら、全権限は「N」(付与なし)です。

念のため、コマンドで確認してみます。

 show grants for gratest@localhost;

f:id:arakan_no_boku:20211225231749p:plain

「 USAGE」というのは、権限なし・・という意味です。

このユーザに「ALL」で権限を付与してみます。

データベースレベルにするので、対象のDB名は適当に「bltdb」にしてます。

GRANT ALL PRIVILEGES ON bltdb.* TO 'gratest'@'localhost'

bltdb.* だから、bltdbデータベースの全テーブルですね。

そうすると、GRANT OPTION以外の権限が付与されて、こんな感じになります。

mysql.db カラム名 権限 Y=あり
Select_priv SELECT Y
Insert_priv INSERT Y
Update_priv UPDATE Y
Delete_priv DELETE Y
Create_priv CREATE Y
Drop_priv DROP Y
Grant_priv GRANT OPTION N
References_priv REFERENCES Y
Index_priv INDEX Y
Alter_priv ALTER Y
Create_tmp_table_priv CREATE TEMPORARY TABLES Y
Lock_tables_priv LOCK TABLES Y
Create_view_priv CREATE VIEW Y
Show_view_priv SHOW VIEW Y
Create_routine_priv CREATE ROUTINE Y
Alter_routine_priv ALTER ROUTINE Y
Execute_priv EXECUTE Y
Event_priv EVENT Y
Trigger_priv TRIGGER Y
Delete_history_priv DELETE HISTORY Y

ALLでやると楽なのですが、権限与えすぎなので、消したいなという場合もあります。

例えば、CREATE ROUTINとALTER ROUTINEの権限を消す場合だと。

revoke CREATE ROUTINE,ALTER ROUTINE on bltdb.* from gratest@localhost;

みたいな感じになります。

GRANTが「REVOKE」に変わって、GRANTの時の「TO」が、REVOKEの時は「FROM」になる点が違いです。

まあ、とりあえず、こんな感じですかね。

ではでは。