【SQL実践|実務向け】MariaDBのアクセス制御をマスターする!GRANT文による権限管理の勘所

導入

データベース管理者(DBA)として、セキュリティの基本となる「最小権限の原則」を守ることは非常に重要です。システム運用において、すべてのユーザーにフル権限を与えることは情報漏洩や誤操作のリスクを増大させます。MariaDBで利用される「GRANT文」を正しく理解し活用することで、ユーザーが必要な範囲内でのみ操作できるよう、安全かつ厳密なアクセス制御を実現できます。

基礎知識

MariaDBにおける権限管理は、ユーザーに対して「何ができるか(権限の種類)」と「どこに対して(権限の範囲)」を定義する仕組みです。
権限には以下の階層構造があり、対象範囲を絞ることでセキュリティを強化します。

グローバルレベル:サーバー全体(.)
データベースレベル:特定のデータベース内(db_name.)
テーブルレベル:特定のテーブル内(db_name.tbl_name)
カラムレベル:特定のテーブル内の特定の列(db_name.tbl_name(col))

新しく作成したばかりのユーザーには「USAGE」という「何も権限がない」状態が割り当てられます。ここからGRANT文を用いて、業務に必要な最小限の権限を付与していくのがDBAの定石です。

実装/解決策

権限を設定するには、GRANT文を使用します。基本構文は「誰に」「どの権限を」「どの対象に」付与するかを記述します。権限の確認には「SHOW GRANTS」コマンドを使用します。これにより、現在そのユーザーにどのようなアクセス許可が与えられているかを即座に可視化できます。

サンプルプログラム

以下は、特定のデータベースに対して特定のユーザーに権限を付与する実務的な例です。そのままコピーして、必要に応じてデータベース名やユーザー名を書き換えてご利用ください。

— 1. 新しいユーザーを作成
CREATE USER ‘app_user’@’localhost’ IDENTIFIED BY ‘password123’;

— 2. 特定のデータベース(sales_db)に対する操作権限を付与
— SELECT, INSERT, UPDATE, DELETE権限のみを許可
GRANT SELECT, INSERT, UPDATE, DELETE ON sales_db. TO ‘app_user’@’localhost’;

— 3. 設定した権限を確認する
SHOW GRANTS FOR ‘app_user’@’localhost’;

— 4. 特定テーブルの特定カラムのみSELECT権限を付与する場合(個人情報保護など)
GRANT SELECT(user_name, email) ON sales_db.customers TO ‘app_user’@’localhost’;

— 5. 変更を反映させる(必要に応じて実行)
FLUSH PRIVILEGES;

応用・注意点

現場でよくある失敗として「権限を付与しすぎてしまう」ことが挙げられます。特に「ALL PRIVILEGES」の使用は、開発環境以外では慎重に判断してください。また、以下の点に注意してください。

1. WITH GRANT OPTIONの取り扱い:
このオプションは、権限を付与されたユーザーが「他者にさらに権限を付与できる」ようになります。特権管理が複雑化するため、通常は管理者にのみ付与し、一般ユーザーには避けるべきです。

2. 権限の削除(REVOKE):
付与しすぎた場合や不要になった権限を剥奪するには「REVOKE」文を使用します。GRANTで付与した範囲と完全に一致させる必要があります。

3. セキュリティ監査:
定期的に「SHOW GRANTS」を実行し、退職者や異動者の権限が残っていないか、過剰な権限が設定されていないかをチェックする運用フローを組み込むことを強く推奨します。

コメント

タイトルとURLをコピーしました