MySQLを運用していると、ユーザー管理が複雑になりがちです。
この記事では、MySQLのユーザー一覧を確認する
SELECT user と、権限を確認する SHOW GRANTS の実践的な使い方を解説します。ユーザーの作成・権限付与・削除まで、現場で使う操作をひととおりカバーします。
【この記事でわかること】
・MySQLのユーザー一覧は SELECT User, Host FROM mysql.user; で確認できる
・ユーザーの権限確認は SHOW GRANTS FOR 'ユーザー'@'ホスト'; を使う
・Host列の % は全ホスト許可を意味し、セキュリティ上の注意が必要
・MariaDB(RHEL/CentOS 7以降のデフォルト)でもSQL文は基本同じ
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
MySQLにログインする
ユーザー管理の操作は、MySQLにログインしてから行います。# MySQLにrootユーザーでログイン $ mysql -u root -p Enter password: mysql>
ユーザー一覧を表示する
1. mysql.userテーブルからユーザーを確認
# MySQL 5.7以降 / MariaDB 10.4以降 mysql> SELECT User, Host FROM mysql.user; +-----------+-----------+ | User | Host | +-----------+-----------+ | root | localhost | | webapp | % | | readonly | 10.0.0.% | +-----------+-----------+
・Host列:接続を許可するホスト。
%は全ホスト、localhostはローカルのみ※ MySQL 5.6以前では
SELECT User, Host, Password FROM mysql.user; でパスワードハッシュも確認できましたが、MySQL 5.7以降ではPassword列が authentication_string に変更されています。ユーザーの権限を確認する
1. SHOW GRANTSで権限を表示
# 特定ユーザーの権限を表示 mysql> SHOW GRANTS FOR 'webapp'@'%'; +-----------------------------------------------------+ | Grants for webapp@% | +-----------------------------------------------------+ | GRANT SELECT, INSERT, UPDATE, DELETE ON `mydb`.* ... | +-----------------------------------------------------+
2. 自分自身の権限を確認
# 現在のユーザーの権限を確認 mysql> SHOW GRANTS;
ユーザーの作成と権限付与
1. ユーザーを作成する
# ユーザーを作成(localhostからのみ接続可能) mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password123'; # 全ホストから接続可能なユーザーを作成 mysql> CREATE USER 'newuser'@'%' IDENTIFIED BY 'password123';
2. 権限を付与する
# 特定データベースの全権限を付与 mysql> GRANT ALL PRIVILEGES ON mydb.* TO 'newuser'@'localhost'; # SELECT権限のみ付与(読み取り専用ユーザー) mysql> GRANT SELECT ON mydb.* TO 'readonly'@'10.0.0.%'; # 権限を反映 mysql> FLUSH PRIVILEGES;
3. ユーザーを削除する
# ユーザーを削除 mysql> DROP USER 'newuser'@'localhost';
MariaDBでの操作
RHEL/CentOS 7以降では、MySQLの代わりにMariaDBがデフォルトで採用されています。ユーザー管理のSQL文はほぼ同じですが、認証方式に違いがある場合があります。# MariaDBにログイン $ mysql -u root -p # MariaDBのバージョン確認 mysql> SELECT VERSION(); # ユーザー一覧(MariaDBでも同じSQL) mysql> SELECT User, Host FROM mysql.user;
MySQLを終了する
mysql> quit Bye
本記事のまとめ
| やりたいこと | コマンド |
|---|---|
| MySQLにログイン | mysql -u root -p |
| ユーザー一覧を表示 | SELECT User, Host FROM mysql.user; |
| ユーザーの権限を確認 | SHOW GRANTS FOR 'ユーザー'@'ホスト'; |
| ユーザーを作成 | CREATE USER 'ユーザー'@'ホスト' IDENTIFIED BY 'パスワード'; |
| 権限を付与 | GRANT ALL PRIVILEGES ON DB名.* TO 'ユーザー'@'ホスト'; |
| ユーザーを削除 | DROP USER 'ユーザー'@'ホスト'; |
「show users」と検索する人へ:MySQLにこのコマンドはない
PostgreSQLには\du、Oracleには SELECT * FROM dba_users という直感的なコマンドがあるため、MySQLにも SHOW USERS があると思って検索する方がたくさんいます。実際には、MySQL / MariaDBに「SHOW USERS」というSQL文は存在しません。# こう打つと文法エラーになる mysql> SHOW USERS; ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'USERS' at line 1
SELECT User, Host FROM mysql.user; です。1. 「ユーザー一覧」「ユーザ一覧」「user list」全部このSQLで取れる
表記揺れに惑わされる必要はありません。MySQL / MariaDBにおける「ユーザ一覧」「ユーザー一覧」「ユーザー確認」「user list」「ユーザ確認」は、すべて以下の1行で取得できます。# どの検索クエリで来た人も、答えはこれ1本 mysql> SELECT User, Host FROM mysql.user;
# 認証方式(plugin列)まで見る mysql> SELECT User, Host, plugin FROM mysql.user; +-----------+-----------+-----------------------+ | User | Host | plugin | +-----------+-----------+-----------------------+ | root | localhost | mysql_native_password | | webapp | % | caching_sha2_password | | readonly | 10.0.0.% | mysql_native_password | +-----------+-----------+-----------------------+
plugin列を見ると、各ユーザがどの認証方式(パスワードチェック方式)を使っているかが分かります。MySQL 8.0以降のデフォルトは caching_sha2_password、MariaDB 10.4以降は mysql_native_password が混在することが多いです。2. 「show grants」を全ユーザに対して実行する
「特定ユーザの権限確認はSHOW GRANTS FOR …」と説明しましたが、「全ユーザの権限を一括で見たい」というニーズもよくあります。MySQLには一括版のコマンドはないので、シェルで回します。# 全ユーザの権限を一括表示するシェル版(root権限で実行) $ mysql -u root -p -BNe \ "SELECT CONCAT('SHOW GRANTS FOR ''', User, '''@''', Host, ''';') \ FROM mysql.user" | \ mysql -u root -p
show grants」「mysql 権限確認」で検索する読者の本当の意図はここにあるケースが多いです。1ユーザずつ手打ちで SHOW GRANTS FOR を実行するのは現実的ではないため、運用ではこの一括スクリプトを使ってください。3. 情報スキーマ経由でも同じ情報が取れる
MySQL 8.0以降では、INFORMATION_SCHEMA.USER_PRIVILEGES や SCHEMA_PRIVILEGES から権限情報を取得できます。# グローバル権限を取得(INFORMATION_SCHEMA経由) mysql> SELECT GRANTEE, PRIVILEGE_TYPE, IS_GRANTABLE FROM INFORMATION_SCHEMA.USER_PRIVILEGES; +----------------+----------------+--------------+ | GRANTEE | PRIVILEGE_TYPE | IS_GRANTABLE | +----------------+----------------+--------------+ | 'root'@'localhost' | SELECT | YES | | 'webapp'@'%' | SELECT | NO | +----------------+----------------+--------------+
mysql.user テーブルを直接読むよりも、INFORMATION_SCHEMA 経由のほうがバージョン差異の影響を受けにくく、自動化スクリプトには向いています。MariaDB 10.5・10.6・11.x で変わったこと(2026年版)
2026年現在、RHEL 9 / Rocky Linux 9 / AlmaLinux 9 系には MariaDB 10.5、Ubuntu 22.04 LTS には MariaDB 10.6、Ubuntu 24.04 LTS には MariaDB 10.11、最新ディストリでは MariaDB 11.x が同梱されています。MySQL の代わりに MariaDB を使うサーバーが増えたため、ユーザ確認まわりで「以前と違う」と感じる点が出てきました。1. SHOW CREATE USER で「実際に発行された CREATE 文」を再現できる
MariaDB 10.4 以降 / MySQL 8.0 以降では、SHOW CREATE USER でユーザの作成時のSQL文を再構成できます。バックアップ・移行時に重宝します。mysql> SHOW CREATE USER 'webapp'@'%'; +----------------------------------------------------------------+ | CREATE USER for webapp@% | +----------------------------------------------------------------+ | CREATE USER 'webapp'@'%' IDENTIFIED VIA mysql_native_password USING '*ABCDEF...'; | +----------------------------------------------------------------+
2. unix_socket 認証(パスワードを使わない root ログイン)
MariaDB 10.4 以降のディストリ標準パッケージでは、rootユーザのデフォルト認証が unix_socket(OSのrootユーザでのみログイン可)に変わっています。「mysql -u root -p」でパスワードを聞かれず、いきなり通る/通らないの違いがここに起因します。# OSのrootから(パスワードなしでログイン可) [root@db01 ~]# mysql MariaDB [(none)]> SELECT User, Host, plugin FROM mysql.user WHERE User='root'; +------+-----------+-------------+ | User | Host | plugin | +------+-----------+-------------+ | root | localhost | unix_socket | +------+-----------+-------------+ # 一般ユーザから(パスワード認証に切り替えたい場合) $ mysql -u root -p ERROR 1698 (28000): Access denied for user 'root'@'localhost'
rootユーザのpluginを mysql_native_password に変更します。# OSのrootからログインして変更 MariaDB [(none)]> ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('your_password'); MariaDB [(none)]> FLUSH PRIVILEGES;
3. MariaDB 11.x 以降の主な変化(運用視点)
MariaDB 11.0 ~ 11.4 で、MySQLとの差異がさらに広がっています。ユーザ管理関連で覚えておきたいポイントを整理します。| 項目 | MariaDB 11.x の挙動 |
|---|---|
| デフォルト認証プラグイン | mysql_native_password(互換性重視)。MySQL 8.0+ は caching_sha2_password |
| ROLE(ロール) | MariaDB 10.0以降サポート。CREATE ROLEでロール作成、GRANTで割り当て |
| SHOW USERSの代替 | MariaDB独自の mysql.global_priv テーブル(10.4以降)も併用可 |
| passwordless root | 11.x でも unix_socket がデフォルトのまま |
4. MariaDB 10.4+ で global_priv テーブルから一覧を取る
MariaDB 10.4 以降では、mysql.user はビュー扱いになり、実体は mysql.global_priv テーブルにあります。SHOW CREATE TABLE mysql.user を見ると確認できます。MariaDB固有の機能(パスワード有効期限・パスワード履歴など)はこちらに格納されています。# MariaDB 10.4+ で実体テーブルを直接見る MariaDB [(none)]> SELECT User, Host, JSON_DETAILED(Priv) FROM mysql.global_priv;
SELECT User, Host FROM mysql.user; を使い続けるのが安全です。global_priv はMariaDB固有のため、MySQLに移行する可能性がある環境では避けてください。5. MariaDBバージョン早見表(2026年5月時点)
ユーザ管理で迷ったら、まず自サーバのバージョンを確認します。| ディストリ | 同梱DB | 確認コマンド |
|---|---|---|
| RHEL 9 / Rocky 9 / AlmaLinux 9 | MariaDB 10.5 | mysql --version または SELECT VERSION(); |
| RHEL 10 / Rocky 10 | MariaDB 10.11 | SELECT VERSION(); |
| Ubuntu 22.04 LTS | MariaDB 10.6 | SELECT VERSION(); |
| Ubuntu 24.04 LTS | MariaDB 10.11 | SELECT VERSION(); |
| MariaDB公式リポジトリ | MariaDB 11.4 LTS(2024-) | SELECT VERSION(); |
※最終更新: 2026-05-11(show users代替・全ユーザ一括grants・MariaDB 10.5/10.6/11.x対応・unix_socket認証を追加)
mysql.user テーブルから authentication_string を含めてユーザー詳細を取得する|権限とパスワードハッシュの一括確認
「MySQL ユーザー一覧」で辿り着く方の多くは、User と Host だけでは足りず、パスワードのハッシュと付与済みの権限まで一括で確認したいケースだと思います。mysql.user テーブルを直接 SELECT すれば、グローバル権限の Y/N、認証プラグイン、パスワードハッシュまで一発で取れます。
# ユーザー / ホスト / 認証プラグイン / パスワードハッシュをまとめて取得
mysql> SELECT User, Host, plugin, authentication_string
-> FROM mysql.user
-> ORDER BY User, Host;
+------------------+-----------+-----------------------+-------------------------------------------+
| User | Host | plugin | authentication_string |
+------------------+-----------+-----------------------+-------------------------------------------+
| app_user | % | mysql_native_password | *81F5E21E35407D884A6CD4A731AEBFB6AF209E1B |
| root | localhost | caching_sha2_password | $A$005$... |
+------------------+-----------+-----------------------+-------------------------------------------+
付与済みのデータベース単位の権限を一覧で見たいなら mysql.db も併用します。
# データベース単位の付与状況を確認
mysql> SELECT Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv
-> FROM mysql.db
-> WHERE User = 'app_user';
私もアカウント棚卸しのときに SHOW GRANTS を1ユーザーずつ叩いていた時期があり、20アカウントを超えた瞬間に手が動かなくなりました。mysql.user と mysql.db を SELECT する方法を覚えると、Excel に貼り付けて棚卸し表を作るのも楽になります。
# SHOW GRANTS を全ユーザー分まとめて生成するワンライナー
mysql> SELECT CONCAT('SHOW GRANTS FOR ''', User, '''@''', Host, ''';') AS query
-> FROM mysql.user;
MySQLのユーザー管理をもっと深く学びたい方へ
権限設定を誤るとデータベース全体がセキュリティリスクにさらされます。
ネットの切れ端の情報をコピペするだけでなく、現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、『Linuxサーバー構築入門マニュアル(図解60P)』を完全無料でプレゼントしています。
「独学の時間がもったいない」「プロから直接、現場の技術を最短で学びたい」という本気の方には、2日で実務レベルのスキルが身につく【初心者向けハンズオンセミナー】も開催しています。
3,100名以上が実践した「型」を無料で公開中
プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。
登録10秒/合わなければ解除3秒 / 詳細はこちら
- 次のページへ:MySQLでユーザー一覧を表示する方法|mysql.userの確認とCURRENT_USERの活用
- 前のページへ:MySQLのrootパスワードを忘れた場合の対処について
- この記事の属するカテゴリ:MySQLへ戻る

無料メルマガで学習を続ける
Linuxの実践スキルをメールで毎週お届け。
登録は1分、解除もいつでも可。
登録無料・いつでも解除できます