はじめに
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, DELETE | GRANT SELECT, INSERT, UPDATE, DELETE ON wp_db.* TO 'wp_user'@'localhost'; |
開発者(開発環境) | ALL PRIVILEGES | GRANT 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
コマンドを使用すると、特定のセッションを強制終了できます。
- まず、現在のプロセスID(
ID
カラム)を確認:
SELECT id, user, host FROM information_schema.processlist;
出力例:
+----+---------+-----------+
| id | user | host |
+----+---------+-----------+
| 10 | yamada | localhost |
| 11 | root | localhost |
+----+---------+-----------+
yamada
のプロセスIDが10
である場合、以下のコマンドで強制終了:
KILL 10;
4.3 ユーザー削除後の後処理
ユーザーを削除した後に、不要な権限情報がデータベースに残っていることがあります。
その場合、FLUSH PRIVILEGES
を実行して権限情報を更新しましょう。
FLUSH PRIVILEGES;
これを実行することで、削除したユーザーの情報が完全にデータベースから消去されます。
4.4 ユーザー削除時の注意点
ユーザーを削除する際には、以下の点に注意してください。
- 削除したユーザーは復元できない
DROP USER
を実行すると、削除されたユーザーは 元に戻せません。- 誤って削除してしまった場合は、再度
CREATE USER
で作成し直す必要があります。
- 権限の引き継ぎが必要な場合がある
- 削除したユーザーが 重要なデータベース操作を担当していた場合、
事前に適切なユーザーへ権限を引き継ぐ必要があります。
- 本番環境での削除は慎重に
- 本番環境では、突然の削除がシステムの停止やエラーの原因になることがあります。
- 事前に影響を分析し、バックアップを取得する ことを推奨します。
よくあるエラーと対処法(FAQ)
MariaDBのユーザー管理を行う際、さまざまなエラーに遭遇することがあります。
このセクションでは、頻出するエラーの原因とその解決策 を解説します。
5.1 初心者向けのFAQ
Q1: MariaDBとMySQLのユーザー管理の違いは?
MariaDBとMySQLは基本的に同じ構文を使用しますが、一部の機能に違いがあります。
比較項目 | MySQL | MariaDB |
---|---|---|
CREATE USER | あり | あり |
SHOW GRANTS FOR | あり | あり |
DROP USER | あり | あり |
CREATE ROLE | MySQL 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」の対処法
原因: 指定したユーザーが既に存在しているため、新規作成できない。
対処法: 既存のユーザーを確認し、必要に応じて削除または変更する。
- 既存のユーザーを確認
SELECT user, host FROM mysql.user WHERE user='yamada';
- 不要な場合は削除
DROP USER 'yamada'@'localhost';
- パスワードを変更する場合
ALTER USER 'yamada'@'localhost' IDENTIFIED BY 'newpassword123';
Q4: GRANT
で権限を付与したのに適用されない
原因: MariaDBの権限キャッシュが更新されていない。
対処法: FLUSH PRIVILEGES
を実行して権限を更新する。
FLUSH PRIVILEGES;
Q5: %
を使っても外部から接続できない
原因: MariaDBの設定ファイルで リモート接続が制限されている可能性 がある。
対処法:
- 設定ファイル
/etc/mysql/my.cnf
(または/etc/mysql/mariadb.conf.d/50-server.cnf
)を編集し、bind-address
の値を0.0.0.0
に変更。
bind-address = 0.0.0.0
- MariaDBを再起動
sudo systemctl restart mariadb
GRANT
コマンドで%
を使って接続許可
GRANT ALL PRIVILEGES ON test_db.* TO 'remote_user'@'%' IDENTIFIED BY 'password';
Q6: 「Access denied for user ‘user’@’host’」のエラーが出る
原因: ユーザーに適切な権限が付与されていないか、パスワードが間違っている。
対処法:
- 権限を確認
SHOW GRANTS FOR 'user'@'host';
- 正しい権限を付与
GRANT ALL PRIVILEGES ON database_name.* TO 'user'@'host';
- 正しいパスワードでログインしているか確認
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に関する役立つ情報を発信していきますので、ぜひ参考にしてください!🚀