DBMS 別セキュリティ - DBMS 別セキュリティ
MySQL / PostgreSQL / SQL Server / Oracle それぞれのデフォルト設定の危険性、認証方式の違い、監査ログの設定方法、よくある設定ミスをまとめたガイド。
概念図
攻撃シナリオ
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.confでtrust認証が設定されていると、パスワードなしで接続可能。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パラメータで出力先を制御
