MEDIA

メディア

  1. TOP
  2. メディア
  3. プログラミング
  4. MySQLのユーザー一覧を表示・確認する方法【権限・認証・トラブル対応まで完全解説】

MySQLのユーザー一覧を表示・確認する方法【権限・認証・トラブル対応まで完全解説】

MySQLの「ユーザーが見えない・分からない」は事故の入口

MySQLを運用していると、こんな悩みに直面したことはないでしょうか。

  • 「このMySQLには、今どんなユーザーが存在しているのか?」
  • 「同じユーザー名なのに、環境によって挙動が違うのはなぜ?」
  • 「権限が足りない・多すぎるユーザーが紛れ込んでいないか不安」
  • 「Access denied や Unknown user が出る原因を切り分けられない」

MySQLのユーザー管理は、単にユーザー名を確認するだけでは不十分です。
実際には、

  • ユーザー名と接続元ホスト(user@host)
  • 認証方式(authentication plugin)
  • 付与されている権限(GRANT)
  • パスワード期限やアカウントロック状態

といった複数の要素が絡み合い、少しの認識違いがセキュリティ事故や障害につながります。

この記事では、MySQL 8系を前提に、

  • ユーザー一覧の正しい確認方法
  • 現在接続中ユーザーの見分け方
  • 権限・作成情報・認証方式の確認
  • よくあるエラーの原因と切り分け手順

までを実務視点で体系的に解説します。
「なんとなく分かっている」状態から、「根拠を持って説明・対応できる」状態へ進むための完全ガイドです。

MySQLのユーザー情報はどこに保存されているのか

mysqlシステムデータベースの役割

MySQLのユーザー情報は、アプリ用のデータベースとは別に、mysql というシステムデータベースで管理されています。

その中核となるのが mysql.user テーブルです。

ここには以下のような情報が集約されています。

  • ユーザー名(user)
  • 接続元ホスト(host)
  • 認証プラグイン
  • パスワード関連情報
  • アカウントロック状態
  • パスワード期限・履歴ポリシー

つまり、ログイン可否に関わる重要情報のほぼすべてがここにあります。

公式ドキュメント:https://dev.mysql.com/doc/refman/8.0/en/system-schema.html

実運用で起きやすい誤解

現場でよくあるのが、

  • 「ユーザーは存在しているのにログインできない」
  • 「権限を付けたはずなのに反映されない」
  • といったトラブルです。
  • 原因の多くは、
  • user だけ見て host を見ていない
  • 別の user@host にマッチしている
  • 認証方式や期限ポリシーの違い

といったmysql.user の中身を正しく把握していないことにあります。

ユーザー一覧を表示する基本方法

user@host の一覧を確認する

最も基本となるユーザー一覧の確認方法は次のSQLです。

SELECT user, host FROM mysql.user;

ここで重要なのは、MySQLのユーザーは user 単体ではなく user@host の組み合わせで定義されるという点です。

  • app@localhost
  • app@%

これらは完全に別のユーザーとして扱われます。

棚卸し時のチェックポイント

ユーザー一覧を確認する際は、次の観点を必ず持ちます。

  • %(ワイルドカード)が使われていないか
  • 想定外の接続元が許可されていないか
  • テスト用ユーザーが残っていないか

特に user@'%' は、意図せず広範囲からの接続を許可するため、セキュリティ上の要注意ポイントです。

mysql.user を参照できない場合の対処

権限不足の可能性

mysql.user を SELECT できない場合、まず疑うべきは権限不足です。
このテーブルは機密情報を含むため、参照できるユーザーは限定されています。

SHOW GRANTS で権限を確認する

SHOW GRANTS;

または特定ユーザーについて確認する場合:

SHOW GRANTS FOR 'user'@'host';

current_user() で実際の認証ユーザーを確認

トラブルシュート時に非常に重要なのが次のSQLです。

SELECT user(), current_user();
  • user():接続時に指定したユーザー名
  • current_user():MySQLが実際に認証した user@host

運用上は current_user() を正として扱うのが原則です。

公式リファレンス:https://dev.mysql.com/doc/refman/8.0/en/information-functions.html

現在接続しているユーザーを確認する方法

なぜ確認が必要なのか

同じユーザー名で接続しているつもりでも、

  • 接続元IP
  • DNS解決
  • ソケット / TCP接続の違い

によって、別の user@host にマッチしていることがあります。

確認手順

SELECT user(), current_user();

この結果を起点に、

  • 権限が足りないのか
  • そもそも想定外のユーザーなのか

を切り分けると、原因究明が一気に早くなります。

ユーザーの権限を確認する(SHOW GRANTS)

権限確認の基本

SHOW GRANTS FOR 'user'@'host';

出力は、そのユーザーが実行可能な操作をSQLとして再現可能な形で表示します。

実務で注意すべきポイント

  • GRANT USAGE ON *.* は実質「権限なし」
  • WITH GRANT OPTION が付いていないか
  • *.* に広範な権限が付与されていないか

最小権限の原則を満たしているか、必ず確認します。

CREATE USER 文を再現する(SHOW CREATE USER)

なぜ重要か

障害対応や環境移行では、「同じユーザーを作り直す」場面が頻発します。
その際、SHOW CREATE USER があると再現性が段違いです。

SHOW CREATE USER 'tanaka'@'localhost'\G

確認できる主な項目

  • 認証プラグイン(例:caching_sha2_password)
  • パスワード期限
  • アカウントロック
  • パスワード履歴・再利用制限

公式ドキュメント:https://dev.mysql.com/doc/refman/8.0/en/show-create-user.html

パスワード(ハッシュ)情報を扱う際の注意点

ハッシュでも「機密情報」

MySQLはパスワードを平文で保持しませんが、
ハッシュ情報も漏えいすればリスクになります。

  • チケットに貼らない
  • チャットに流さない
  • 不要に参照権限を広げない

実務的なベストプラクティス

  • ハッシュを確認するより、パスワードリセットで対応
  • 認証方式とクライアントの対応状況を優先確認
  • TLS要件など接続条件を含めて点検

よくあるエラーと原因の切り分け

Access denied for user

主な原因:

  • 権限不足
  • パスワード期限切れ
  • アカウントロック
  • 認証方式不一致

切り分け手順:

  1. current_user() を確認

  2. SHOW GRANTS

  3. SHOW CREATE USER

Unknown user

主な原因:

  • user@host が存在しない
  • 接続元が想定と違う
  • host 定義の不足

user 名だけで判断しないのが最大のポイントです。

まとめ|MySQLユーザー管理を「見える化」する

MySQLのユーザー管理では、次の4点をセットで確認できることが重要です。

  • ユーザー一覧(user@host)
  • 実際の認証ユーザー(current_user)
  • 権限(SHOW GRANTS)
  • 作成情報(SHOW CREATE USER)

これらを体系立てて確認できるようになると、

  • 障害対応が速くなる
  • セキュリティ事故を防げる
  • 環境差分に強くなる

といった実務上のメリットが大きくなります。

技術を深く理解し、運用まで責任を持てるエンジニアへ

この記事をここまで読んでいるあなたは、
「動けばOK」ではなく、「なぜそう動くのか」を理解したいエンジニアだと思います。

私たちは、MySQLをはじめとするインフラ・DB・アプリケーションを
設計・運用・改善まで一貫して考えられるエンジニアと一緒に仕事がしたいと考えています。

日々のトラブルシュートや改善を楽しめる環境で、
技術に向き合い続けたい方は、ぜひ私たちの採用情報も覗いてみてください。

「こういう技術記事が書ける・理解できる人」と
一緒に働けることを、チーム一同楽しみにしています。

学んだSQLを、実務で使えるスキルにしたい方へ

本記事ではSQLの基本的な考え方や使い方を解説しましたが、
「実務で使えるレベルまで身につけたい」と感じた方も多いのではないでしょうか。

SQLは、文法を理解するだけでなく、

  • どんなデータ構造で使われるのか
  • どんなクエリが現場で求められるのか

を意識して学ぶことで、実践力が大きく変わります。

そうした「実務を見据えたSQL学習」を進めたい方には、
完全無料で学べるプログラミングスクール ZeroCode という選択肢もあります。

  • SQLを含むWeb・データベース系スキルを体系的に学べる
  • 未経験者でも実務を意識したカリキュラム
  • 受講料・教材費がかからない完全無料の学習環境
  • 完全オンラインでスキマ学習


ZeroCodeについて詳しく見る

※学習内容や進め方を確認するだけでもOKです

Join us! 未経験からエンジニアに挑戦できる環境で自分の可能性を信じてみよう 採用ページを見る→

記事監修

ドライブライン編集部

[ この記事をシェアする ]

記事一覧へ戻る