MySQLで機密データを保護するための6ステップ
ステップ3:設定ファイルのパーミッションをチェックする
サーバの接続をより高速かつ便利にするため、個々のユーザやサーバ管理者が、アカウントのパスワードをユーザ別のオプションファイルに格納する場合がある。これは非常によく行われることであるが、このようなパスワードはファイル内にプレーンテキストで格納されており、簡単に読むことができる。従ってそのような設定ファイルは、パブリックではない場所に、システムの他のユーザから見えないかたちで格納されていることを確認する必要がある。理想的には、ユーザ別設定ファイルはユーザのホームディレクトリにパーミッション0600で格納するのがよい。
ステップ4:クライアントサーバ間の通信を暗号化する
MySQL(やその他)のクライアントサーバアーキテクチャでは、ネットワークを介してデータを通信する際のセキュリティが重要な問題となる。クライアントサーバ間のトランザクションがプレーンテキストで行われている場合、送信しているデータパケットをハッカーが盗聴し、機密情報にアクセスする可能性があるのである。このセキュリティホールは、MySQLの設定でSSLを有効にするか、OpenSSHのようなセキュアシェルユーティリティを用いて、暗号化された安全な「トンネル」にデータを流すことで対処可能だ。このようにして暗号化されたクライアントサーバ接続では、行き来するデータを許可されていないユーザが読み取ることは非常に難しい。
ステップ5:リモートアクセスを無効にする
ユーザがリモートからサーバにアクセスする必要のない場合、MySQLへの接続をすべて強制的にUNIXのソケットファイルを介して行うことで、ネットワーク攻撃のリスクを大幅に減少させることが可能となる。これは、--skip-networkingオプションを付加してサーバを起動することにより実現できる。この設定を行うと、MySQLへのTCP/IPネットワーク接続がブロックされるため、システムにリモート接続するユーザがいないことを保証できる。
ヒント:これを強化する手法としては、MySQLのサーバ設定にディレクティブbind-address=127.0.0.1を追加し、ローカルマシンのIPアドレスにMySQLを強制的にバインドさせる方法がある。この設定では、MySQLに接続できるのは同じシステムのユーザのみであることが保証される。
ステップ6:MySQLのアクセスログを積極的に監視する
MySQLにはさまざまな種類のログファイルが用意されており、クライアントの接続やクエリ、サーバのエラーを追跡することができる。その中でも、最も重要なのは「一般クエリログ」(general query log)だ。一般クエリログでは、クライアントの接続と切断がタイムスタンプと共に記録されるほか、クライアントが実行したクエリも記録される。もしネットワークから侵入を試みているような不審な活動を見つけたら、このログを監視してその活動の原因を探ってみるのがよいだろう。
MySQLのデータベースは常に継続して守り続けなければならない。上記のステップを終えたからといって安心はできないのである。セキュリティに関するヒントは、MySQLのマニュアルやMySQLのフォーラムに多数掲載されている。それらのサイトを読んだ上で、監視とシステムセキュリティのアップデートを積極的に行って欲しい。幸運を祈る!
- ホワイトペーパー



