Secure Steady
DB アクセス制御 - DB アクセス制御 の使い方・オプション・サンプル

DB アクセス制御 - DB アクセス制御

データベースへのアクセスを適切に制限する仕組み。最小権限の原則に基づき、ユーザー・ロール・権限を管理する。

概念図

DB アクセス制御 diagram

実例

読み取り専用 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 を使用し、通信を暗号化する
  • 定期的な権限の棚卸し: 不要になった権限やユーザーを定期的に確認・削除する

関連トピック