Secure Steady
DBMS 別セキュリティ - DBMS 別セキュリティ の使い方・オプション・サンプル

DBMS 別セキュリティ - DBMS 別セキュリティ

MySQL / PostgreSQL / SQL Server / Oracle それぞれのデフォルト設定の危険性、認証方式の違い、監査ログの設定方法、よくある設定ミスをまとめたガイド。

概念図

DBMS 別セキュリティ diagram

攻撃シナリオ

MySQL のデフォルト設定を安全化する

bash
-- MySQL: test データベースの削除
DROP DATABASE IF EXISTS test;
-- 匿名ユーザーの削除
DELETE FROM mysql.user WHERE User='';
FLUSH PRIVILEGES;

PostgreSQL の認証とログ設定

bash
-- PostgreSQL: pg_hba.conf の trust 認証を排除
# 危険: host all all 0.0.0.0/0 trust
# 安全: host all all 10.0.0.0/8 scram-sha-256

-- postgresql.conf: ログ設定
log_connections = on
log_disconnections = on
log_statement = 'ddl'

SQL Server の sa 無効化と監査設定

bash
-- SQL Server: sa アカウントの無効化
ALTER LOGIN sa DISABLE;
-- 監査ログの有効化
CREATE SERVER AUDIT [SecurityAudit]
  TO FILE (FILEPATH = '/var/opt/mssql/audit/')
  WITH (ON_FAILURE = CONTINUE);
ALTER SERVER AUDIT [SecurityAudit] WITH (STATE = ON);

DBMS ごとのデフォルト設定リスク

DBMS をインストール直後のデフォルト状態には、本番環境で深刻なリスクとなる設定が多数含まれます。

  • MySQL: test データベースが誰でもアクセス可能、匿名ユーザーが存在、root がパスワードなしでリモート接続可能な場合がある。mysql_secure_installation の実行が必須
  • PostgreSQL: pg_hba.conftrust 認証が設定されていると、パスワードなしで接続可能。listen_addresses = '*' がデフォルトの場合、外部からの接続を許してしまう
  • SQL Server: sa アカウントが有効でデフォルトパスワードが設定されたまま放置されるケースが多い。混合モード認証が不要なら Windows 認証のみに限定する
  • Oracle: デフォルトのスキーマアカウント(SCOTT, HR 等)がロック解除のまま残っている場合がある。DBSNMP, SYSMAN 等の管理アカウントのパスワード変更も必須

認証方式の比較

各 DBMS が提供する認証方式には違いがあり、適切な方式を選択することが重要です。

  • MySQL: mysql_native_password(SHA1 ベース、非推奨)と caching_sha2_password(SHA-256 ベース、推奨)。8.0 以降はデフォルトが caching_sha2_password
  • PostgreSQL: md5(MD5 ハッシュ)、scram-sha-256(推奨)、cert(クライアント証明書)、ldap(LDAP 連携)。scram-sha-256 はパスワードの平文送信を防ぐ
  • SQL Server: Windows 統合認証(Kerberos/NTLM)と SQL Server 認証(混合モード)。可能な限り Windows 認証を使用する
  • Oracle: パスワード認証、OS 認証、Kerberos、PKI。Oracle 12c 以降は大文字小文字区別のパスワードハッシュがデフォルト

監査ログの設定

不正アクセスの検知やコンプライアンス要件の充足のため、監査ログの有効化は必須です。

  • MySQL: audit_log プラグイン(Enterprise 版)または general_log / slow_query_log で基本的なログを取得。Community 版では MariaDB Audit Plugin も利用可能
  • PostgreSQL: log_statement = 'all'(全 SQL を記録、負荷注意)または 'ddl'(DDL のみ)。pgaudit 拡張でより詳細な監査ログを取得可能
  • SQL Server: SQL Server Audit 機能でサーバーレベル・データベースレベルの監査を設定。Windows イベントログや外部ファイルに出力可能
  • Oracle: 統合監査(Unified Auditing)を使用し、ポリシーベースで監査対象を定義する。AUDIT_TRAIL パラメータで出力先を制御

関連トピック