MySQLでユーザーの主な権限の種類・概要と権限をユーザーに付与・取り消しする方法を解説します。
- MySQL 8.0
環境準備
MySQLの環境を準備しましょう。
すでにある方はスキップで良いですが、まだの方はこちらの記事でローカル環境にDockerを使ってMySQLの環境を作成しましょう。
Dockerでデータを永続化しつつMySQLの環境を構築する方法を解説
権限の種類と概要
まずは、MySQLの主な権限の種類と概要について解説します。
権限 | 説明・概要 |
---|---|
ALL PRIVILEGES | データベースもしくはシステムのフルアクセス。 (権限を付与するときにデータベースを設定するかしないかで変わります) |
CREATE | 新しいデータベースやテーブルの作成アクセス。 |
SELECT | SELECTコマンドを使ったデータベースの読み取りアクセス。 |
INSERT | データ挿入アクセス。 |
UPDATE | データ更新アクセス。 |
DELETE | データ削除アクセス。 |
DROP | データベースやテーブルの削除アクセス。 |
GRANT OPTION | 他のユーザーの権限の付与または削除アクセス。 |
モグモグさん
細かく権限が分かれているので、操作するユーザーに合わせて設定が可能です。
全ての権限を確認したい方はドキュメントを参考にどうぞ〜
ユーザーを新規で作成した場合、権限を持たない状態で作成されます。
権限の確認方法
権限を確認する方法は、主に2つあります。
mysql> show grants;
mysql> show grants for test@localhost;
こんな感じで結果が表示されます。
GRANT USAGE
は権限がないことを示しています。
権限の付与方法
それでは、権限の付与方法を解説します。
権限を付与するには、grant 権限 on レベル to ユーザー;
の構文で付与が可能です。
MySQL8より以前のバージョンでは、grant 権限 on レベル to ユーザー identified by 'password';
のように書くと、権限を与えるかつ新規でユーザーを追加できます。
権限には、先ほど説明したようなCREATE
やALL PRIVILEGES
が入ります。
レベルには、以下の4種類が入ります。
- グローバルレベル:
grant 権限 on *.* to ユーザー
(すべてのデータベースやテーブルに適用) - データベースレベル:
grant 権限 on db_name.* to ユーザー
(特定のデータベースに適用) - テーブルレベル:
grant 権限 on db_name.table_name to ユーザー
(特定のテーブルに適用) - カラムレベル:
grant 権限 (カラム1, カラム2) on db_name.table_name to ユーザー
(特定のカラムに適用)
モグモグさん
それぞれのレベルの権限を付与する例を紹介していきます。
グローバルレベルの権限を付与
何でもできる管理者ユーザー権限を付与
root
ユーザーと同じ権限になります。
mysql> grant all on *.* to admin@localhost with grant option;
モグモグさん
安易にこの権限を与えるのはセキュリティの観点で危険です。
グローバルレベルでCREATE
権限を付与
mysql> grant create on *.* to test@localhost;
データベースレベルの権限を付与
testdbというデータベースに対してすべての権限を付与
mysql> grant all on testdb.* to test@localhost;
testdbというデータベースに対してselect
とinsert
の権限を付与
mysql> grant select, insert on testdb.* to test@localhost;
テーブルレベルの権限を付与
testdbのmoviesテーブルに対してすべての権限を付与
mysql> grant all on testdb.movies to test@localhost;
testdbのmoviesテーブルに対してselect
の権限を付与
mysql> grant select on testdb.movies to test@localhost;
カラムレベルの権限を付与
testdbのmoviesのnameカラムに対してselect
の権限を付与
mysql> grant select (name) on testdb.movies to test@localhost;
権限の取り消し方法
次に、権限の取り消し方法を解説します。
権限を取り消すには、revoke 権限 on レベル from ユーザー;
の構文で取り消しが可能です。
モグモグさん
権限付与の構文のto
がfrom
に変わっている点が注意です。
権限やレベルの考え方は同じなので、権限付与の方法が理解できていれば、取り消しも実行できるようになると思います。
testユーザーの権限をすべて取り消す
mysql> revoke all on *.* from test@localhost;
testユーザーのtestdbのcreate権限を取り消す
mysql> revoke create on testdb.* from test@localhost;
まとめ
MySQLでユーザーの主な権限の種類・概要と権限をユーザーに付与・取り消しする方法を解説しました。
モグモグさん
ユーザーに適切な権限を与えることはセキュリティの観点でも非常に重要なので、覚えておきましょう。