LinuxサーバーのMariaDB user一覧を確認する方法|SELECT・SHOW USERSコマンド活用

運営:リナックスマスター.JP(代表 宮崎智広)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > Linuxtips > データーベース管理 > LinuxサーバーのMariaDB user一覧を確認する方法|SELECT・SHOW USERSコマンド活用
「MariaDBに登録されているユーザーを一覧で確認したい」
「SHOW USERSと打ったらエラーになった。どうすれば?」

Linuxサーバーでデータベースを運用していると、ユーザー管理の場面でこういった疑問に直面することがあります。MySQLとコマンド体系が似ているようで微妙に違い、うろ覚えのコマンドを打ってエラーになるのはよくあるパターンです。

この記事では、RHEL 9系~Ubuntu 24.04 LTSを想定環境として、MariaDB 10.6~10.11上でmariadb user一覧を確認するSELECT文の正しい書き方、SHOW USERSが使えない理由と代替手段、現在の接続ユーザーや権限の確認方法まで解説します。

この記事のポイント

・MariaDBユーザー一覧は SELECT user, host FROM mysql.user; で取得する
・SHOW USERSコマンドはMariaDB/MySQL共通で存在せず実行するとエラーになる
・SHOW GRANTS FOR 'user'@'host'; で特定ユーザーの権限を個別に確認できる
・現在の接続ユーザーは SELECT CURRENT_USER(); で即確認できる


「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

MariaDBでユーザー一覧の確認が必要になる場面

Linuxサーバー上でMariaDBを運用していると、ユーザー一覧を確認したい場面は意外と多くあります。

・不要になったアカウントが残っていないか整理したいとき
・別のサーバーに同じ構成を再現したいとき
・接続エラーが出て、該当ユーザーが存在するか確認したいとき

MariaDBのユーザー情報はシステムデータベース「mysql」の「user」テーブルに格納されています。このテーブルを直接参照することで、登録されているすべてのユーザーとホスト情報をまとめて確認できます。

SELECT文でMariaDB user一覧を取得する基本手順

MariaDBにログインし、mysql.userテーブルをSELECT文で参照するのが基本手順です。

1. MariaDBにログインする

まずmariadbクライアントでローカルに接続します。

# rootユーザーでログイン(パスワードを入力) mariadb -u root -p # または従来の mysql コマンドでも可 mysql -u root -p

MariaDB 10.4以降では「mariadb」コマンドと「mysql」コマンドのどちらでも接続できます。本記事では統一してmariadbコマンドで説明します。

2. mysql.userテーブルでユーザーとホストを確認する

ログイン後、以下のSELECT文を実行します。

-- ユーザー名とホストの一覧(最小構成) SELECT user, host FROM mysql.user;

出力例(環境により異なります)

+------------------+---------------+ | user | host | +------------------+---------------+ | root | 127.0.0.1 | | root | ::1 | | root | localhost | | mariadb.sys | localhost | | appuser | 192.168.1.% | | webuser | % | +------------------+---------------+ 6 rows in set (0.001 sec)

「host」列は接続を許可するホストを示します。「%」はワイルドカードで、どのホストからでも接続を許可することを意味します。同じユーザー名でもhostが異なれば別のアカウントとして扱われるため、必ずuserとhostをセットで確認しましょう。

3. 認証プラグインや詳細情報を確認する

パスワードの認証方式や有効期限も含めた詳細を確認したい場合は、列を追加します。

-- 認証プラグインとパスワード有効期限も含めて確認 SELECT user, host, plugin, password_expired FROM mysql.user;

出力例(環境により異なります)

+------------------+---------------+-----------------------+------------------+ | user | host | plugin | password_expired | +------------------+---------------+-----------------------+------------------+ | root | localhost | unix_socket | N | | mariadb.sys | localhost | mysql_native_password | N | | appuser | 192.168.1.% | mysql_native_password | N | | webuser | % | mysql_native_password | N | +------------------+---------------+-----------------------+------------------+

MariaDB 10.4以降では、rootユーザーのpluginが「unix_socket」になっているケースがあります。その場合、OSのUnixソケット認証が使われており、通常のパスワード認証ではなく「sudo mariadb」でのログインが必要です。

SHOW USERSコマンドはなぜ使えないのか

MariaDBもMySQLも、「SHOW USERS;」というコマンドは存在しません。ユーザー一覧を取得しようと試みて実行すると、次のようなエラーになります。

-- 誤ったコマンド(エラーになる) SHOW USERS;

出力例(環境により異なります)

ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'USERS' at line 1

PostgreSQLには「\du」コマンドでユーザー一覧を表示できる機能があります。PostgreSQLに慣れているエンジニアがMariaDB/MySQLで同様のコマンドを探してハマるケースが典型的です。MariaDBでは前述のSELECT文が正解です。

なお、SHOW構文には「SHOW GRANTS」という有効なコマンドがあります。これはユーザーに付与された権限を確認するためのもので、ユーザー一覧そのものではありませんが、権限管理の場面でよく使います。

-- 現在ログイン中のユーザーの権限を確認 SHOW GRANTS; -- 特定ユーザーの権限を確認 SHOW GRANTS FOR 'appuser'@'%';

現在接続中のユーザーを確認する

「自分が今どのユーザーとして接続しているか」を確認する場合は、CURRENT_USER()関数を使います。

-- 現在のログインユーザーを確認 SELECT CURRENT_USER(); -- セッション開始時に認証されたユーザーを確認(プロキシ認証時に差が出る) SELECT USER();

出力例(環境により異なります)

+----------------+ | CURRENT_USER() | +----------------+ | root@localhost | +----------------+

サーバーに現在接続しているすべてのセッションを一覧で確認したい場合は、プロセスリストを参照します。

-- 接続中の全セッションを確認(PROCESS権限が必要) SHOW PROCESSLIST;

出力例(環境により異なります)

+----+---------+--------------------+-------+---------+------+------------------+ | Id | User | Host | db | Command | Time | Info | +----+---------+--------------------+-------+---------+------+------------------+ | 1 | root | localhost | NULL | Query | 0 | SHOW PROCESSLIST | | 2 | appuser | 192.168.1.10:43210 | appdb | Sleep | 12 | NULL | +----+---------+--------------------+-------+---------+------+------------------+

SHOW PROCESSLISTにはPROCESS権限が必要です。root以外のユーザーで実行すると、自分自身のセッションのみが表示されます。

MariaDBを含むLinuxサーバーの運用スキルを体系的に学びたい方には、現場で使えるLinuxサーバー管理の実務を2日間で習得できるLinux Master Pro Seminarも参考にしてください。

よくあるエラーと対処法

「Access denied for user 'root'@'localhost'」が出た場合

mysql.userテーブルを参照するにはSELECT権限が必要です。MariaDB 10.4以降でrootのpluginがunix_socketになっている場合、パスワード認証ではログインできません。sudoを使ったOS認証でログインしてください。

# OS認証(unix_socket)でMariaDBにログイン sudo mariadb

パスワード列が表示されない・列名が違う場合

MariaDB 10.4以降では従来の「Password」列が廃止され、「authentication_string」列に移行しています。古い手順書を参考にしてパスワードハッシュを確認しようとするとエラーになることがあります。現在の列構成はSELECT *で全列を確認してください。

-- 全列を確認して列名を把握する(1行目のみ表示) SELECT * FROM mysql.user LIMIT 1\G

「Table 'mysql.user' doesn't exist」が出た場合

MariaDBのシステムテーブルが初期化されていない可能性があります。インストール直後にmariadb-install-dbを実行してシステムテーブルを作成してください。

# システムテーブルの初期化(MariaDB 10.4以降) sudo mariadb-install-db --user=mysql

本記事のまとめ

MariaDB user一覧を確認するコマンドをまとめます。
やりたいこと コマンド
ユーザーとホストの一覧 SELECT user, host FROM mysql.user;
認証プラグインも含めた詳細 SELECT user, host, plugin FROM mysql.user;
現在ログイン中のユーザー SELECT CURRENT_USER();
特定ユーザーの権限確認 SHOW GRANTS FOR 'user'@'host';
接続中の全セッション確認 SHOW PROCESSLIST;
「SHOW USERS;」はMariaDB/MySQL共通で存在しないコマンドです。ユーザー一覧はmysql.userテーブルへのSELECT文、権限確認はSHOW GRANTSと使い分けることで、日々のユーザー管理を正確に行えます。
現場で通用する安全なLinuxサーバー構築の「型」を体系的に身につけたい方へ、
20年以上・3,100名以上の指導実績を持つ宮崎智広が講師を務める少人数ハンズオンセミナーを開催しています。
MariaDB・MySQL等のデータベース管理を含むLinuxサーバー運用スキルを2日間で習得できます。
>> Linux Master Pro Seminar の詳細はこちら

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録

運営

リナックスマスター.JP(代表 宮崎智広)

株式会社イーネットマーキュリーが運営するLinux教育サイトです。代表の宮崎智広は現役のLinuxサーバー管理者として20年以上の実務経験を持ち、累計3,100名以上のエンジニアを指導してきました。実践型のLinuxセミナーや無料マニュアルの配布を通じてLinux人材の育成に取り組んでいます。