「盗聴や中間者攻撃に対しても安全に」なりたいのは何ですか?あなたのパスワード、またはあなたのデータ?
質問のタイトルは、特に認証に関するものです。MySQLは、盗聴者からパスワードを保護するという合理的な役割を果たします(プレーンテキストは送信されず、ナンスを使用するとリプレイ攻撃が無効になります)。MySQLプロトコル内部の引用 :
MySQL4.1以降
mysql.user.PasswordはSHA1(SHA1(password))を格納することに注意してください
- サーバーはランダムな文字列(スクランブル)をクライアントに送信します
- クライアントは以下を計算します:
- stage1_hash = SHA1(password)、ユーザーが入力したパスワードを使用します。
- トークン=SHA1(スクランブル+ SHA1(stage1_hash))XOR stage1_hash
- クライアントはトークンをサーバーに送信します
- サーバーは計算します
- stage1_hash'=トークンXORSHA1(scramble + mysql.user.Password)
- サーバーはSHA1(stage1_hash')とmysql.user.Passwordを比較します
- それらが同じであれば、パスワードは大丈夫です。
(SHA1(A + B)は、AとBの連結のSHA1であることに注意してください。)
このプロトコルは古いものの欠陥を修正します。ネットワーク上でスヌーピングすることもmysql.user.Passwordも接続を成功させるのに十分ではありません。しかし、mysql.user.Passwordと傍受されたデータの両方がネットワーク上にある場合、接続するのに十分な情報があります。
ただし、認証されたセッションはプレーンテキストで続行されます。盗聴者はすべてのクエリと結果を見ることができます。そしてMITMは同じものに変更を加えることができるでしょう。マニュアルに記載されているように:
デフォルトでは、MySQLはクライアントとサーバー間で暗号化されていない接続を使用します。これは、ネットワークにアクセスできる誰かがあなたのすべてのトラフィックを監視し、送受信されているデータを見ることができることを意味します。クライアントとサーバー間でデータを転送しているときに、データを変更することもできます。
答えが気に入らないかもしれませんが、SSLは、データの盗聴(通信を暗号化する方法は他にありますか?)とMITM攻撃(他の当事者が相手が自分の考えている人物であることを確認する方法)の両方を打ち負かすように設計されたツールです。実際、mysqlクライアント/サーバープロトコルだけでこれらの脅威を打ち負かした場合、SSL経由でmysqlを使用する理由はありません(したがって、サポートされている構成である可能性は低いでしょう)。