DB アクセス制御 - DB アクセス制御
データベースへのアクセスを適切に制限する仕組み。最小権限の原則に基づき、ユーザー・ロール・権限を管理する。
概念図
実例
読み取り専用 DB ユーザーの作成(MySQL)
bash
-- 読み取り専用ユーザーの作成
CREATE USER 'app_readonly'@'10.0.0.%' IDENTIFIED BY 'strong_password';
GRANT SELECT ON mydb.* TO 'app_readonly'@'10.0.0.%';PostgreSQL の行レベルセキュリティ
bash
-- 行レベルセキュリティ(PostgreSQL)
ALTER TABLE orders ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON orders
USING (tenant_id = current_setting('app.current_tenant')::int);DB アクセス制御の原則
データベースのアクセス制御は、不正なデータアクセスを防ぐための基本的な防御層です。
- 最小権限の原則: アプリケーションの DB ユーザーには、必要な操作に限定した権限のみ付与する(例: 読み取り専用アプリには SELECT のみ)
- ロールベースアクセス制御(RBAC): 個別ユーザーではなくロールに権限を付与し、ユーザーをロールに割り当てる
- ネットワークレベルの制限: DB サーバーへの接続元 IP を制限し、アプリケーションサーバーからのみアクセスを許可する
- 行レベルセキュリティ(RLS): テーブル内の行に対してアクセスポリシーを設定し、マルチテナント環境でのデータ分離を実現する
- 監査ログ: DB への全アクセスをログに記録し、不正なアクセスを検知する
実装のベストプラクティス
- アプリケーションごとに専用ユーザー: アプリケーションごとに異なる DB ユーザーを使用する。共有アカウントは使わない
- 管理者アカウントの分離: 日常運用には最小権限のアカウントを使い、管理者アカウントは必要時のみ使用する
- パスワードの安全な管理: DB のパスワードはシークレット管理ツールで管理する。ソースコードやコンフィグファイルにハードコーディングしない
- 接続の暗号化: DB への接続には TLS を使用し、通信を暗号化する
- 定期的な権限の棚卸し: 不要になった権限やユーザーを定期的に確認・削除する
