MySQLの権限は、ユーザーがデータベース内で実行できる操作を決定します。SHOW GRANTSを使うと、これらの権限を確認し、ユーザーに適切なアクセス権があるかを確かめられます。次のことが可能です:
- 特定ユーザーのすべての権限を表示する。
- セキュリティ目的でユーザーを監査する。
- 現在の権限に基づいて権限を変更する。
本題に入る前に、モダンで高速なMySQLデータベース管理ツール、Beekeeper Studioをご紹介させてください。SQLエディタは入力中に自動補完が効き、実行したすべてのクエリの履歴が残るので、権限の監査にも便利です。MySQLなら無料で使えますので、こちらからダウンロードしてください。
SHOW GRANTSの基本構文
SHOW GRANTS FOR 'username'@'host';
- ‘username’はMySQLユーザーを指します。
- ‘host’はユーザーが接続するホスト名またはIPアドレスを指します。
特定ユーザーの権限を表示する
localhostから接続するユーザー‘john’がいるとします。その権限を確認するには、次のクエリを使用します:
SHOW GRANTS FOR 'john'@'localhost';
出力例:
+---------------------------------------------------------+
| Grants for john@localhost |
+---------------------------------------------------------+
| GRANT USAGE ON *.* TO `john`@`localhost` |
| GRANT SELECT, INSERT ON `mydb`.* TO `john`@`localhost` |
+---------------------------------------------------------+
この出力では:
- GRANT USAGEは、ユーザーにグローバル権限がないことを示します。
- GRANT SELECT, INSERT ON mydb.*は、johnが‘mydb’データベース内のすべてのテーブルに対して
SELECTとINSERTの権限を持っていることを示します。
全ユーザーの権限を表示する(MySQL 5.7以降)
MySQLには、全ユーザーの権限を直接表示する単一のコマンドはありません。ただし、mysql.userテーブルから必要なクエリを生成し、各ユーザーに対してSHOW GRANTSを実行できます:
SELECT CONCAT('SHOW GRANTS FOR \'', user, '\'@\'', host, '\';')
FROM mysql.user;
このクエリは、システム内の各ユーザーに対するSHOW GRANTS文の一覧を生成します。出力例は次のとおりです:
+--------------------------------------------------+
| CONCAT('SHOW GRANTS FOR \'', user, '\'@\'', host |
+--------------------------------------------------+
| SHOW GRANTS FOR 'root'@'localhost'; |
| SHOW GRANTS FOR 'john'@'localhost'; |
| SHOW GRANTS FOR 'admin'@'192.168.1.10'; |
+--------------------------------------------------+
その後、SHOW GRANTSクエリを実行して、特定ユーザーの権限を確認できます。
現在のユーザーの権限を表示する
現在データベースに接続しているユーザーの権限を表示するには、CURRENT_USER()関数を使用できます:
SHOW GRANTS FOR CURRENT_USER();
出力例:
+---------------------------------------------------------+
| Grants for current user |
+---------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO `root`@`localhost` |
+---------------------------------------------------------+
このコマンドは、自分の権限がよくわからないユーザーに特に便利です。
出力の読み方
- GRANT USAGE:ユーザーにグローバル権限はないものの、特定のデータベースに対する権限を持っている可能性があることを示します。
- ALL PRIVILEGES:GRANT OPTIONを除く、データベース単位またはグローバルのすべての権限を付与します。
- GRANT OPTION:ユーザーが他のユーザーに権限を付与できるようにします。
データベース固有の権限:SELECT、INSERT、UPDATE、DELETEなどの権限は、特定のデータベースやテーブルに対して付与できます。
MySQLのGRANTSを理解する
MySQLには、管理者がユーザーに権限を付与するためのGRANT文があります。
逆に、権限を取り消すためのREVOKE文もあります。
ただし、権限を変更する前に、現在どのような権限が設定されているかを把握する必要があります。そこで役立つのがSHOW GRANTSコマンドです。
SHOW GRANTSコマンドは、ユーザーの権限を複製するために発行すべきGRANT文を表示します。
このコマンドはMySQLとMariaDBの両方のデータベースエンジンで使用できます。
まとめ
まとめると、MySQLのSHOW GRANTSコマンドはユーザー権限を表示するために使用します。データベース管理者がユーザー権限を監査・管理するうえで重要なツールです。
こちらの記事もおすすめです:
Beekeeper Studioは無料&オープンソースのMySQL GUIです
最近MySQLの作業にBeekeeper Studioを使っていますが、すぐにお気に入りのデータベースツールのひとつになりました。インターフェースはすっきりしていてモダンで、余計なものがないため、他のツールにありがちなごちゃごちゃに煩わされずクエリに集中できます。 - Surendra Singh
Beekeeper Studioは高速で直感的、使いやすいMySQLクライアントです。他にも多数のデータベースに対応しており、Windows、Mac、Linuxで快適に動作します。
MySQLユーザーによるBeekeeper Studioの声
長年phpMyAdminを使ってきた後にこのプログラムを選びました。まるでより高品質な世界に足を踏み入れたようで、ユーザーが本当に大切にされていると心から感じました。コンセプトそのもの、実装、実際の使い心地、そのすべてについてMatthewに心から感謝しています。
素晴らしいツールです。PostgresとMySQLのDB管理用として、これまで見つけた中で最も実用的なIDEです。面倒なことなく、とにかくちゃんと動きます :-)