ユーザー管理は【MariaDB】のセキュリティと効率的な運用において重要です。本ブログでは【MariaDB】でのユーザーに対する操作を分かり易く紹介します。
【MariaDB】rootユーザー(管理者アカウント)
インストール直後に作成されるMariDBの管理者アカウントです。すべての権限を持ち、通常はローカルホストからのみ接続可能です。
※インストール直後には、mariadb.sysユーザーも作成されますがこれについては後述します。
現在 存在するユーザーは以下のコマンドを使用して確認できます。
SELECT User, Host FROM mysql.user;
C:\>mysql -u root -p
Enter password: ******
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 11.4.4-MariaDB-log mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> SELECT User, Host FROM mysql.user;
+-------------+-------------+
| User | Host |
+-------------+-------------+
| root | 127.0.0.1 |
| root | ::1 |
| root | asroc-win10 |
| mariadb.sys | localhost |
| root | localhost |
+-------------+-------------+
5 rows in set (0.003 sec)
【MariaDB】ユーザーの操作
ユーザーの作成
ユーザーを作成する際の基本的なSQL構文は以下の通りです。
CREATE USER 'ユーザー名'@'ホスト' IDENTIFIED BY 'パスワード';
基本的なユーザーの作成例
- ローカルホストからのみアクセス可能なユーザーを作成。
このユーザーはMariaDBがインストールされたサーバーからのみ接続可能です。
CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'secure_password';
- 任意のホストからアクセス可能なユーザーを作成。
@’%’は、どのホストからでも接続を許可する設定です。ただし、セキュリティリスクを伴うため注意が必要です。
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'secure_password';
- 特定のIPアドレスからのみ接続可能なユーザーを作成
CREATE USER 'restricted_user'@'192.168.1.100' IDENTIFIED BY 'secure_password';
ユーザーの削除
ユーザーを削除する際の基本的なSQL構文は以下の通りで、パスワードは不要です
DROP USER 'ユーザー名'@'ホスト';
基本的なユーザーの削除例
- 特定のホストに紐付けられたユーザーの削除
DROP USER 'user1'@'localhost';
- 全ホストからアクセス可能なユーザーの削除
DROP USER 'global_user'@'%';
- 複数のユーザーを同時に削除
DROP USER 'user1'@'localhost', 'user2'@'%';
ユーザーのロック・アンロック(無効化・有効化)
ユーザーの使用を一時的に無効にしたり有効にしたりします。
ユーザーのロック
- アカウントを無効化するには、ACCOUNT LOCKを使用します。
ALTER USER 'username'@'host' ACCOUNT UNLOCK;
ユーザーのアンロック
- アカウントを無効化するには、ACCOUNT UNLOCKを使用します。
ALTER USER 'username'@'host' ACCOUNT UNLOCK;
ユーザー情報の確認
- MariaDBに存在する全ユーザーを確認する。
SELECT User, Host FROM mysql.user;
- 特定ユーザーの詳細情報を確認する。
MariaDB [(none)]> SHOW GRANTS FOR 'test_user1'@'%';
ユーザー有無の確認
- 特定のユーザーが存在するか否かを確認します。
SELECT User, Host FROM mysql.user WHERE User = 'username';
- ユーザーが存在する場合
MariaDB [(none)]> SELECT User, Host FROM mysql.user WHERE User = 'test_user1';
+------------+------+
| User | Host |
+------------+------+
| test_user1 | % |
+------------+------+
- ユーザーが存在しない場合
MariaDB [(none)]> SELECT User, Host FROM mysql.user WHERE User = 'username';
Empty set (0.001 sec)
パスワードの管理
パスワードの変更
- 既存ユーザーのパスワードを変更するには、ALTER USER又はSET PASSWORD文を使用します。
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
SET PASSWORD FOR 'username'@'host' = PASSWORD('new_password');
- パスワード無しに変更
ALTER USER 'username'@'host' IDENTIFIED BY '';
ユーザー名の変更
MariaDBでは直接ユーザー名を変更することはできませんが次の手順で名前変更が可能です。
- 新しいユーザーを作成
CREATE USER 'new_username'@'host' IDENTIFIED BY 'password';
- 既存の権限をコピー
GRANT ALL PRIVILEGES ON *.* TO 'new_username'@'host';
- 古いユーザーを削除
DROP USER 'old_username'@'host';
【MariaDB】mariadb.sysユーザー
MariaDB 10.4以降で追加されたシステムユーザーです。このユーザーは、主に内部的な管理目的で使用されます。
主な特徴
- 内部管理用ユーザー
- MariaDBの内部的な操作やパフォーマンススキーマ関連のクエリに使用されます。
- 管理者や一般ユーザーが直接使用することは想定されていません。
- 権限
- MariaDBが特定の内部処理で必要とする最低限の権限が付与されています。
- MariaDBが特定の内部処理で必要とする最低限の権限が付与されています。
- ホストの制限
- Host列にlocalhostが設定されており、リモート接続は許可されていません。
- Host列にlocalhostが設定されており、リモート接続は許可されていません。
- セキュリティ
- MariaDBの内部的な処理以外には使用されないため、通常、追加のセキュリティ対策は不要です。
- MariaDBの内部的な処理以外には使用されないため、通常、追加のセキュリティ対策は不要です。
使用目的
- パフォーマンススキーマや情報スキーマのクエリ実行
- MariaDBの内部でパフォーマンススキーマや情報スキーマに関連するクエリを実行するために使用されます。
- MariaDBの内部でパフォーマンススキーマや情報スキーマに関連するクエリを実行するために使用されます。
- メンテナンス操作のサポート
- 特定の内部プロセスや自動メンテナンスタスクで必要な操作を実行するために利用されます。
まとめ
ユーザー管理においては、最小権限の原則や適切な認証設定、不要なユーザーや権限の削除が重要です。また、定期的な監査やセキュリティ対策を実施し、データベース全体の保護を確実にすることが求められます。