VillageSQL is a drop-in replacement for MySQL with extensions.
All examples on this page work on VillageSQL. Install Now →
デプロイ環境ごとの強化
すべての強化ステップが同じリスクと手間のトレードオフを持つわけではありません。優先順位付けにはこの表を使ってください。
インターネットに面したとは、ロードバランサーの背後であっても、ポート 3306 がプライベートネットワークの外から到達可能であることを意味します。「必須」の行はすべて例外なく適用してください。
内部/プライベートネットワークは、VPC、プライベートサブネット、またはオフィスネットワーク内からのみアクセスできるサーバーを指します。一部の緩和策(CA 署名の証明書、すべてのアカウントでの SSL 強制)は、わずかな利益のために運用上のオーバーヘッドを加えます。しかし、強力なパスワード、最小権限、および bind-address の制限は依然として譲れません。
開発/ステージングのマシンは、資格情報漏えいの最も一般的な発生源です。パスワードの複雑さを省略したり、ホスト
'%' への権限付与を残したりしてよいのは、そのインスタンスにラップトップや CI 環境の外から到達できない場合だけです。ステージングが本番データとネットワークを共有しているなら、最低でも内部/プライベートとして扱ってください。
mysql_secure_installation
ローカルの開発マシンでないサーバーに MySQL をインストールしたら、直ちにこれを実行します。- root パスワードの設定(まだ設定されていない場合)
- 匿名ユーザーの削除
- リモートからの root ログインの禁止
- test データベースの削除
- 権限テーブルの再読み込み
root アカウントの制限
root はlocalhost からのみ接続できるべきです。これを確認し、強制します。
'%' ホストのエントリがある場合は削除します。
匿名ユーザーと test データベースの削除
パスワードポリシー
MySQL 8.0 以降には、パスワードの複雑さのルールを強制するvalidate_password コンポーネントが含まれています。使用前にインストールが必要で、mysql_secure_installation は自動でのインストールを提案します。手動でインストールするには次のようにします。
LOW(長さのみ)、MEDIUM(長さ + 文字種)、STRONG(+ 辞書チェック)。
忘れられる可能性のあるアカウントには、パスワードの有効期限を設定します。
最小権限のユーザーアカウント
アプリケーションのアカウントには、必要最小限の権限を与えるべきです。GRANT の完全な構文は MySQL のユーザー管理を参照してください。 一般的なパターンは次のとおりです。'%' ではなく、サブネット表記または特定の IP を使ってください。
既存の権限の監査
すべてのアカウントとその権限を確認します。SSL/TLS 接続
MySQL 8.0 はデフォルトで SSL/TLS を有効にし、起動時に証明書を自動生成します。有効になっていることを確認します。ネットワークアクセス
MySQL が必要なインターフェイスだけで待ち受けるように制限します。my.cnf で次のように設定します。
127.0.0.1 にバインドし、ポート 3306 を外部に公開しないでください。ファイアウォールのルールは第二の防御層であり、バインドアドレスの制限の代わりにはなりません。
危険な機能の無効化
アプリケーションが使わない機能はオフにします。my.cnf では次のとおりです。
よくある質問
デフォルトの MySQL 8.4 のインストールは安全ですか?
古い MySQL のデフォルトよりは良いですが、本番環境向けに強化されてはいません。MySQL 8.4 はランダムな root パスワードを生成し、デフォルトで SSL を有効にします。それでも、root パスワードが強力であることの確認、匿名ユーザーの削除、ホストアクセスの制限、およびvalidate_password コンポーネントの設定は必要です。
MySQL を root で実行すべきですか?
決してしないでください。MySQL は専用の低権限システムユーザー(通常はmysql)として実行すべきです。サーバープロセスを root で実行すると、MySQL の脆弱性がシステム全体の侵害につながる可能性があります。
トラブルシューティング
関連項目
- MySQL のユーザー管理 — ユーザーの作成と最小権限のアクセスの付与
- MySQL でのパスワードハッシュ — MySQL に保存するアプリケーションレベルの資格情報の保護
- MySQL の JWT 認証 — 資格情報の発行とローテーションを ID プロバイダーへ移す