MariaDBのユーザー作成・権限管理・削除方法|初心者向け完全ガイド

目次

はじめに

1.1 MariaDBでユーザーを作成する方法を知りたいですか?

MariaDBで新しいユーザーを作成し、適切な権限を設定したいと考えたことはありませんか?
例えば、以下のような場面で困ったことがあるかもしれません。

  • CREATE USER を実行したのにログインできない
  • GRANT を使用して権限を付与したのに適用されない
  • 本番環境で適切な権限を設定する方法がわからない
  • 不要なユーザーを安全に削除する方法を知りたい

このような問題に直面している場合、本記事を読めば MariaDBのユーザー作成から権限管理、削除方法までの全ての手順を理解できる ようになります。

1.2 本記事で解決できること

この記事では、MariaDBのユーザー管理に関する以下の内容を詳しく解説します。

  • MariaDBのユーザー作成・削除の方法
  • 権限の付与・管理(適切な権限設定のポイント)
  • よくあるエラーとその解決策
  • 開発環境と本番環境での適切な運用方法

これらの内容を 初心者でもわかりやすいSQLサンプル付き で解説するため、学習しながら実践できます。

1.3 対象読者

本記事は、以下のような方に向けて書かれています。

  • 初心者:MariaDBのユーザー管理を初めて学ぶ方
  • エンジニア:開発環境で適切な権限設定を行いたい方
  • DB管理者:本番環境のセキュリティを強化したい方

実際の運用に役立つ情報を提供するため、MariaDBを初めて扱う方でも安心して取り組めます。

MariaDBのユーザー作成

2.1 基本的なユーザー作成コマンド

MariaDBでは、CREATE USER コマンドを使用して新しいユーザーを作成します。
以下の構文で、ユーザー名とパスワードを指定できます。

CREATE USER 'ユーザー名'@'ホスト名' IDENTIFIED BY 'パスワード';

例えば、yamada というユーザーを localhost で作成し、パスワードを password123 に設定する場合は、以下のようになります。

CREATE USER 'yamada'@'localhost' IDENTIFIED BY 'password123';

このコマンドを実行することで、yamada というユーザーが ローカルホスト(サーバー上でのみログイン可能) に作成されます。

2.2 ユースケース別の作成例

MariaDBのユーザー作成では、どこから接続を許可するかを ホスト名 の部分で指定できます。
ユースケースごとに適切な設定を行うことが重要 です。

ケースコマンド例説明
ローカル環境(開発用)CREATE USER 'dev_user'@'localhost' IDENTIFIED BY 'password';開発環境専用のユーザー
外部接続を許可CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password';どのホストからでも接続可能(セキュリティ注意)
特定のIPアドレスからの接続を許可CREATE USER 'admin'@'192.168.1.100' IDENTIFIED BY 'password';特定のIPアドレスのみに接続を制限
特定のサブネットからの接続を許可CREATE USER 'network_user'@'192.168.1.%' IDENTIFIED BY 'password';192.168.1.x のIPアドレスを持つマシンのみ接続可

このように、'%' を使うと すべてのホストからの接続を許可 できますが、
セキュリティ的にリスクが高いため、本番環境では推奨されません
本番環境では IPアドレスを指定する か、 VPNを経由して接続できる設定にする のがベストです。

2.3 ユーザー作成時の注意点

ユーザーを作成する際に、いくつかの 注意点 があります。

(1)既存のユーザーを確認する

ユーザーを作成する前に、すでに同じユーザーが存在していないか確認することが重要です。
以下のコマンドを実行すると、現在登録されているユーザーを一覧表示できます。

SELECT user, host FROM mysql.user;

出力例:

+---------+-----------+
| user    | host      |
+---------+-----------+
| root    | localhost |
| yamada  | localhost |
+---------+-----------+

同じ ユーザー名@ホスト名 のユーザーがすでに存在している場合、CREATE USER を実行するとエラーになります。

(2)ユーザーが既に存在する場合の対処

MariaDBでは、既存のユーザーを上書きして作成することはできません。
そのため、すでに同じユーザーが存在する場合は、以下のいずれかの方法で対処します。

  • 既存ユーザーのパスワードを変更する
ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
  • 不要なユーザーを削除してから、新しく作成する
DROP USER 'yamada'@'localhost';
CREATE USER 'yamada'@'localhost' IDENTIFIED BY 'password123';

MariaDBの権限管理

3.1 権限を付与する

基本構文

MariaDBでは、GRANT コマンドを使用してユーザーに権限を付与できます。

GRANT 権限 ON データベース名.テーブル名 TO 'ユーザー名'@'ホスト名';

例えば、yamada ユーザーに test_db のすべての権限を与える場合は、以下のように記述します。

GRANT ALL PRIVILEGES ON test_db.* TO 'yamada'@'localhost';

このコマンドの意味:

  • ALL PRIVILEGES:すべての権限を付与
  • test_db.*:データベース test_db 内のすべてのテーブルに適用
  • 'yamada'@'localhost':ローカルホストからログインする yamada に適用

3.2 よく使われる権限一覧

MariaDBでは、以下のような権限を付与できます。

権限説明
ALL PRIVILEGESすべての権限を付与
SELECTデータの読み取り
INSERTデータの挿入
UPDATEデータの更新
DELETEデータの削除
CREATE新しいテーブルやデータベースの作成
DROPデータベースやテーブルの削除
GRANT OPTION他のユーザーに権限を付与
ALTERテーブル構造の変更
EXECUTEストアドプロシージャや関数の実行
RELOADサーバー設定のリロード

特定の操作だけ許可したい場合は、個別に権限を付与するのが推奨されます。

3.3 ユースケース別の権限設定

シチュエーションごとに適切な権限を設定することが重要です。

シチュエーション付与すべき権限コマンド例
WordPress運用者SELECT, INSERT, UPDATE, DELETEGRANT SELECT, INSERT, UPDATE, DELETE ON wp_db.* TO 'wp_user'@'localhost';
開発者(開発環境)ALL PRIVILEGESGRANT ALL PRIVILEGES ON dev_db.* TO 'dev_user'@'%';
読み取り専用ユーザーSELECT のみGRANT SELECT ON analytics_db.* TO 'readonly'@'localhost';
データベース管理者(本番環境)ALL PRIVILEGES(制限付き)GRANT ALL PRIVILEGES ON production_db.* TO 'admin'@'localhost';

本番環境では、ALL PRIVILEGES を安易に付与しないように注意しましょう。

3.4 付与した権限を確認する

付与した権限を確認するには、SHOW GRANTS コマンドを使用します。

SHOW GRANTS FOR 'ユーザー名'@'ホスト名';

例えば、yamada ユーザーの権限を確認する場合:

SHOW GRANTS FOR 'yamada'@'localhost';

出力例:

+-----------------------------------------------------------------------------------+
| Grants for yamada@localhost                                                       |
+-----------------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON test_db.* TO 'yamada'@'localhost'                |
+-----------------------------------------------------------------------------------+

このように、現在付与されている権限を確認できます。

3.5 権限を取り消す(削除)

ユーザーから特定の権限を取り消す場合は、REVOKE コマンドを使用します。

基本構文

REVOKE 権限 ON データベース名.テーブル名 FROM 'ユーザー名'@'ホスト名';

例えば、yamada ユーザーから UPDATE 権限を削除する場合:

REVOKE UPDATE ON test_db.* FROM 'yamada'@'localhost';

すべての権限を取り消す

REVOKE ALL PRIVILEGES ON *.* FROM 'yamada'@'localhost';

3.6 権限変更が反映されない時の対処法

MariaDBでは、権限の変更がすぐに適用されないことがあります。その場合は、以下のコマンドを実行してください。

FLUSH PRIVILEGES;

このコマンドを実行することで、権限設定が即座に反映されます。

MariaDBのユーザー削除

4.1 ユーザーを削除する

MariaDBのユーザーを削除するには、DROP USER コマンドを使用します。

基本構文

DROP USER 'ユーザー名'@'ホスト名';

例えば、yamada というユーザーを localhost から削除する場合は、以下のように実行します。

DROP USER 'yamada'@'localhost';

このコマンドを実行すると、yamada ユーザーはMariaDBのシステムから完全に削除されます。

4.2 ユーザー削除前に確認すべきこと

ユーザーを削除する前に、いくつかの重要な確認事項があります。
誤って必要なユーザーを削除しないように注意しましょう。

(1)削除対象のユーザーが存在するか確認

MariaDBでは、存在しないユーザーを削除しようとするとエラーになります。
以下のコマンドを実行し、削除対象のユーザーが存在するかを確認しましょう。

SELECT user, host FROM mysql.user;

出力例:

+---------+-----------+
| user    | host      |
+---------+-----------+
| root    | localhost |
| yamada  | localhost |
| admin   | 192.168.1.100 |
+---------+-----------+

この一覧に yamada ユーザーが含まれていれば、削除可能です。

(2)削除するユーザーが現在接続中か確認

MariaDBでは、削除しようとしているユーザーが現在セッションを持っていると、
削除しても すぐに影響が反映されない 場合があります。
以下のコマンドを実行して、削除対象のユーザーが現在アクティブかを確認しましょう。

SELECT user, host FROM information_schema.processlist;

出力例:

+---------+-----------+
| user    | host      |
+---------+-----------+
| yamada  | localhost |
| root    | localhost |
+---------+-----------+

この場合、yamada ユーザーが現在アクティブであるため、削除前に そのセッションを終了させる 必要があります。

(3)セッションを強制終了する

KILL コマンドを使用すると、特定のセッションを強制終了できます。

  1. まず、現在のプロセスID(ID カラム)を確認:
SELECT id, user, host FROM information_schema.processlist;

出力例:

+----+---------+-----------+
| id | user    | host      |
+----+---------+-----------+
| 10 | yamada  | localhost |
| 11 | root    | localhost |
+----+---------+-----------+
  1. yamada のプロセスIDが 10 である場合、以下のコマンドで強制終了:
KILL 10;

4.3 ユーザー削除後の後処理

ユーザーを削除した後に、不要な権限情報がデータベースに残っていることがあります。
その場合、FLUSH PRIVILEGES を実行して権限情報を更新しましょう。

FLUSH PRIVILEGES;

これを実行することで、削除したユーザーの情報が完全にデータベースから消去されます。

4.4 ユーザー削除時の注意点

ユーザーを削除する際には、以下の点に注意してください。

  1. 削除したユーザーは復元できない
  • DROP USER を実行すると、削除されたユーザーは 元に戻せません
  • 誤って削除してしまった場合は、再度 CREATE USER で作成し直す必要があります。
  1. 権限の引き継ぎが必要な場合がある
  • 削除したユーザーが 重要なデータベース操作を担当していた場合
    事前に適切なユーザーへ権限を引き継ぐ必要があります。
  1. 本番環境での削除は慎重に
  • 本番環境では、突然の削除がシステムの停止やエラーの原因になることがあります。
  • 事前に影響を分析し、バックアップを取得する ことを推奨します。

よくあるエラーと対処法(FAQ)

MariaDBのユーザー管理を行う際、さまざまなエラーに遭遇することがあります。
このセクションでは、頻出するエラーの原因とその解決策 を解説します。

5.1 初心者向けのFAQ

Q1: MariaDBとMySQLのユーザー管理の違いは?

MariaDBとMySQLは基本的に同じ構文を使用しますが、一部の機能に違いがあります。

比較項目MySQLMariaDB
CREATE USERありあり
SHOW GRANTS FORありあり
DROP USERありあり
CREATE ROLEMySQL 8.0以降MariaDB 10.0以降

MariaDB では CREATE ROLE がサポートされているため、役割ベースのユーザー管理が可能です。

Q2: localhost% の違いは?

MariaDBのユーザー管理では、ホスト名の指定が重要です。

  • localhostローカルマシン からのみ接続可能
  • %すべてのホスト からの接続を許可(セキュリティリスクあり)
  • 192.168.1.100特定のIPアドレス のみ許可
  • 192.168.1.%特定のサブネット(192.168.1.*) のみ許可

5.2 トラブルシューティング

Q3: 「ERROR 1396 (HY000): Operation CREATE USER failed」の対処法

原因: 指定したユーザーが既に存在しているため、新規作成できない。

対処法: 既存のユーザーを確認し、必要に応じて削除または変更する。

  1. 既存のユーザーを確認
SELECT user, host FROM mysql.user WHERE user='yamada';
  1. 不要な場合は削除
DROP USER 'yamada'@'localhost';
  1. パスワードを変更する場合
ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';

Q4: GRANT で権限を付与したのに適用されない

原因: MariaDBの権限キャッシュが更新されていない。

対処法: FLUSH PRIVILEGES を実行して権限を更新する。

FLUSH PRIVILEGES;

Q5: % を使っても外部から接続できない

原因: MariaDBの設定ファイルで リモート接続が制限されている可能性 がある。

対処法:

  1. 設定ファイル /etc/mysql/my.cnf(または /etc/mysql/mariadb.conf.d/50-server.cnf)を編集し、
    bind-address の値を 0.0.0.0 に変更。
bind-address = 0.0.0.0
  1. MariaDBを再起動
sudo systemctl restart mariadb
  1. GRANT コマンドで % を使って接続許可
GRANT ALL PRIVILEGES ON test_db.* TO 'remote_user'@'%' IDENTIFIED BY 'password';

Q6: 「Access denied for user ‘user’@’host’」のエラーが出る

原因: ユーザーに適切な権限が付与されていないか、パスワードが間違っている。

対処法:

  1. 権限を確認
SHOW GRANTS FOR 'user'@'host';
  1. 正しい権限を付与
GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'host';
  1. 正しいパスワードでログインしているか確認
mysql -u user -p

まとめ

MariaDBのユーザー管理は、データベースの安全性や運用の効率性を高めるために非常に重要です。
本記事では、ユーザーの作成、権限管理、削除方法、よくあるエラーとその解決策 について詳しく解説しました。

6.1 記事の振り返り

① MariaDBのユーザー作成

  • CREATE USER コマンドを使用して新規ユーザーを作成
  • @'ホスト名' の指定でアクセスを制限可能
  • ユーザー作成時には、既存ユーザーを確認 することが重要

② MariaDBの権限管理

  • GRANT コマンドで 最小限の権限を付与
  • SHOW GRANTS コマンドで 現在の権限を確認
  • REVOKE コマンドで 不要な権限を削除
  • FLUSH PRIVILEGES変更を適用

③ MariaDBのユーザー削除

  • DROP USER コマンドでユーザーを削除
  • 削除前に 現在接続中のセッションを確認
  • FLUSH PRIVILEGES不要な権限情報をクリア

④ よくあるエラーと対処法

  • ERROR 1396 (HY000)既存のユーザーを確認し、必要なら削除
  • GRANT での権限変更が反映されない → FLUSH PRIVILEGES を実行
  • Access denied for user適切な権限があるか確認
  • % を使っても外部接続できない → bind-address の設定を変更

6.2 MariaDBのユーザー管理のベストプラクティス

  • 必要最小限の権限のみを付与
  • ALL PRIVILEGES は安易に付与しない
  • 本番環境では SELECT, INSERT, UPDATE, DELETE のみに制限する
  • 権限変更後は必ず確認
  • SHOW GRANTS コマンドで、意図した通りに設定されているかチェックする
  • 削除時は事前に影響をチェック
  • 本番環境での削除は慎重に行い、バックアップを取ることが推奨
  • セキュリティ対策を徹底
  • リモート接続時はIP制限を行う
  • rootユーザーには強力なパスワードを設定
  • 不要なユーザーや権限は定期的に削除

6.3 最後に

本記事を通じて、MariaDBのユーザー管理の基本から応用まで を学ぶことができました。
この知識を活用し、安全で効率的なデータベース管理 を実現してください。

今後も、MariaDBに関する役立つ情報を発信していきますので、ぜひ参考にしてください!🚀