サイト名変更・お引越しのお知らせ

MySQLのユーザーの主な権限の種類と権限を付与・取り消しする方法を解説

MySQLでユーザーの主な権限の種類・概要と権限をユーザーに付与・取り消しする方法を解説します。

バージョン
  • MySQL 8.0

環境準備

MySQLの環境を準備しましょう。

すでにある方はスキップで良いですが、まだの方はこちらの記事でローカル環境にDockerを使ってMySQLの環境を作成しましょう。

Dockerでデータを永続化しつつMySQLの環境を構築する方法を解説

権限の種類と概要

まずは、MySQLの主な権限の種類と概要について解説します。

権限説明・概要
ALL PRIVILEGESデータベースもしくはシステムのフルアクセス。
(権限を付与するときにデータベースを設定するかしないかで変わります)
CREATE新しいデータベースやテーブルの作成アクセス。
SELECTSELECTコマンドを使ったデータベースの読み取りアクセス。
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';のように書くと、権限を与えるかつ新規でユーザーを追加できます。

権限には、先ほど説明したようなCREATEALL 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というデータベースに対してselectinsertの権限を付与

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 ユーザー;の構文で取り消しが可能です。

モグモグさん

権限付与の構文のtofromに変わっている点が注意です。

権限やレベルの考え方は同じなので、権限付与の方法が理解できていれば、取り消しも実行できるようになると思います。

testユーザーの権限をすべて取り消す

mysql> revoke all on *.* from test@localhost;

testユーザーのtestdbのcreate権限を取り消す

mysql> revoke create on testdb.* from test@localhost;

まとめ

MySQLでユーザーの主な権限の種類・概要と権限をユーザーに付与・取り消しする方法を解説しました。

モグモグさん

ユーザーに適切な権限を与えることはセキュリティの観点でも非常に重要なので、覚えておきましょう。