【MariaDB】ユーザーの権限管理(付与/確認/取り消し/ロール 他)
ユーザーに与える権限はデータベースのセキュリティと安定性に直結する重要な要素です。適切な権限設定を行うことで以下のメリットが得られます。
- セキュリティの向上
- 誤操作の防止
- 責任範囲の明確化
最小権限の原則
各ユーザーには業務に必要な最低限の権限のみを付与し、セキュリティリスクを最小限に抑えることが重要です。
【MariaDB】rootユーザー
インストール直後に作成されるデフォルトのルートユーザー (root)は全ての権限を持っています。通常、このユーザーが新しいユーザーを作成し権限を設しします。
権限の付与
作成したユーザーに権限を付与する基本的なSQL構文は以下の通りです。
GRANT 権限 ON データベース名.テーブル名 TO 'ユーザー名'@'ホスト';
- すべての権限を付与
GRANT ALL PRIVILEGES ON my_database.* TO 'example_user'@'localhost';
- 特定の権限を付与
GRANT SELECT, INSERT ON my_database.my_table TO 'example_user'@'localhost';
- 特定のデータベースのみにアクセスを許可
GRANT SELECT ON reports.* TO 'report_viewer'@'%';
権限の確認
- 以下のコマンドで、ユーザーに付与されている権限を確認できます。
SHOW GRANTS FOR 'ユーザー名'@'ホスト';
- 自分の権限を確認する場合
SHOW GRANTS FOR CURRENT_USER;
権限の取り消し
- 不要な権限は以下のコマンドで削除します
REVOKE 権限 ON データベース名.テーブル名 FROM 'ユーザー名'@'ホスト';
【MariaDB】権限の種類
ユーザー作成に必要な権限
ユーザーを作成するには、CREATE USER 権限または SUPER 権限が必要です。
- CREATE USER 権限
- 新しいユーザーを作成するための基本的な権限です。
- 新しいユーザーを作成するための基本的な権限です。
- SUPER 権限
- データベース全体を管理できる権限です。
CREATE USERを含む全権限を持ちますが、運用上は特定の管理者にのみ付与します。
- データベース全体を管理できる権限です。
CREATE USER 権限を付与する方法
*.*:すべてのデータベースに対する権限(ユーザー作成に対しては通常これを指定します)
GRANT CREATE USER ON *.* TO 'user_admin'@'localhost';
基本権限
データベースやテーブルに対する基本的な操作を管理するための権限です。
№ | 権限名 | 内 容 |
1 | SELECT | データを読み取る権限 |
2 | INSERT | データを挿入する権限 |
3 | UPDATE | データを更新する権限 |
4 | DELETE | データを削除する権限 |
5 | CREATE | 新しいデータベース/テーブル/ビューなどを作成する権限 |
6 | DROP | インデックスを作成または削除する権限 |
7 | INDEX | インデックスを作成または削除する権限 |
8 | ALTER | テーブルの構造を変更する権限 |
9 | EXECUTE | ストアドプロシージャや関数を実行する権限 |
10 | SHOW VIEW | ビューの定義を表示する権限 |
11 | CREATE VIEW | ビューを作成する権限 |
高度な権限
データベースの管理やシステムレベルの操作に関連します。
№ | 権限名 | 内 容 |
1 | CREATE USER | 新しいユーザーを作成する権限 |
2 | DROP USER | ユーザーを削除する権限 |
3 | GRANT OPTION | 他のユーザーに権限を付与または取り消す権限 |
4 | RELOAD | システム変数をリロードする権限(FLUSH操作が含まれる) |
5 | PROCESS | サーバーで実行中のプロセスを表示する権限 |
6 | FILE | サーバーのファイルに読み書きする権限 |
7 | SUPER | スーパーユーザー権限(すべての操作を実行可能) |
8 | REPLICATION CLIENT | バイナリログやリレーログの位置を確認する権限 |
9 | REPLICATION SLAVE | マスターからスレーブへのデータ複製を許可する権限 |
10 | SHUTDOWN | サーバーを停止する権限 |
セキュリティ関連の権限
セキュリティに関連する権限で、データの暗号化や認証に影響を与えるものです。
№ | 権限名 | 内 容 |
1 | CREATE ROLE | 新しいロールを作成する権限 |
2 | DROP ROLE | ロールを削除する権限 |
3 | APPLICATION_PASSWORD_ADMIN | アプリケーションパスワードの管理権限 |
4 | SET PASSWORD | 他のユーザーのパスワードを設定/変更する権限 |
特定の操作に関連する権限
特定の機能や操作に関連する権限です。
№ | 権限名 | 内 容 |
1 | LOCK TABLES | テーブルをロックする権限 |
2 | REFERENCES | 外部キー制約を設定する権限 |
3 | EVENT | イベントスケジューラを管理する権限 |
4 | TRIGGER | トリガーを作成または削除する権限 |
5 | CREATE TEMPORARY TABLES | 一時テーブルを作成する権限 |
グローバルレベルで利用可能な権限
この権限はサーバー全体に影響を与える権限です。
№ | 権限名 | 内 容 |
1 | ALL PRIVILEGES | すべての権限を付与(個別の権限を指定する代わりに使用する) |
【MariaDB】ロール
MariaDBのロール (Role)は、ユーザーの権限管理を簡素化するための仕組みです。複数の権限をロールにまとめ、ロールをユーザーに割り当てることで権限の付与や管理を効率的に行うことができます。これは特に、多くのユーザーが異なる権限を持つような環境で便利です。
ロールの特徴
- 権限のグループ化:
- ロールに権限を付与し、そのロールをユーザーに割り当てることでユーザー個別に権限を管理する必要がなくなります。
- 柔軟性:
- 複数のロールを1人のユーザーに割り当てることが可能です。
- ロール自体にも権限を付与したり削除したりできます。
- 有効化と無効化:
- ロールをアクティブ(有効化)または非アクティブ(無効化)にすることができます。
ロールの作成
新しいロールを作成するには、CREATE ROLEコマンドを使用します。
CREATE ROLE 'role_name';
ロールへの権限付与
ロールに権限を付与するには、GRANTコマンドを使用します。
GRANT 権限名 ON データベース名.テーブル名 TO 'role_name';
ロールのユーザーへの割り当て
ユーザーにロールを割り当てるには、GRANTコマンドを使用します。
GRANT 'role_name' TO 'username'@'host';
ロールの有効化
割り当てたロールを有効化するには、SET ROLEコマンドを使用します。
SET ROLE 'role_name';
- 複数のロールを有効化
SET ROLE 'role_name1', 'role_name2';
- すべてのロールを有効化
SET ROLE ALL;
ロールを無効化
SET ROLE NONE コマンドを使用します。
SET ROLE NONE;
ロールの権限確認
現在のロールに付与されている権限の確認はSHOW GRANTS コマンドを使用します。
SHOW GRANTS FOR 'role_name';
ロールの削除
ロールを削除するには、DROP ROLEコマンドを使用します。
DROP ROLE 'role_name';
ロールの利用例
- データベース:company_db
- ユーザー:employeeとmanager
- 要件
- employeeは読み取り専用アクセスが必要。
- managerはすべての
- ロールの作成と権限の付与
CREATE ROLE 'read_only';
CREATE ROLE 'full_access';
GRANT SELECT ON company_db.* TO 'read_only';
GRANT ALL PRIVILEGES ON company_db.* TO 'full_access';
- ロールの割り当て
GRANT 'read_only' TO 'employee'@'localhost';
GRANT 'full_access' TO 'manager'@'localhost';
- employeeのロールの有効化
employee接続時にロールを有効化
SET ROLE 'read_only';
- managerのロールの有効化
manager接続時にロールを有効化
SET ROLE 'full_access';
ロールの注意事項
- ロールはデフォルトでは無効
- 割り当てたロールを使用するには、SET ROLEで有効化が必要です。
- 割り当てたロールを使用するには、SET ROLEで有効化が必要です。
- ロールと直接権限の競合
- ユーザーに直接付与された権限とロールによる権限が競合する場合、どちらも有効になります。
- ユーザーに直接付与された権限とロールによる権限が競合する場合、どちらも有効になります。
- 最小権限の原則
- セキュリティの観点から不要な権限をロールに含めないようにします。
まとめ
ユーザー権限やロールは、MariaDBでアクセス制御や操作範囲を効率的に管理する手段です。
権限はユーザーごとに細かく設定でき、ロールを利用すれば複数のユーザーに共通の権限を一括で付与・管理可能です。
便利な一方で、最小権限の原則を守り不必要な権限やロールを付与しないことが重要です。また、定期的に権限やロールを監査し不要な設定を削除することでセキュリティリスクを軽減できます。適切な設定により運用効率と安全性の向上を図りましょう。