パスワードは、CREATE USER
、GRANT
、SET PASSWORD
などの SQL ステートメントや、PASSWORD()
関数を呼び出すステートメントにプレーンテキストとして書き込むことができます。これらのステートメントが MySQL サーバーによって、書き込まれたとおりにログに記録された場合、それらのパスワードはログにアクセス可能なすべてのユーザーから利用できるようになります。
MySQL 5.6.3 からステートメントロギングが変更され、次のステートメントについてはパスワードがプレーンテキストで表示されなくなりました。
CREATE USER ... IDENTIFIED BY ...
GRANT ... IDENTIFIED BY ...
SET PASSWORD ...
SLAVE START ... PASSWORD = ... (as of 5.6.4)
CREATE SERVER ... OPTIONS(... PASSWORD ...) (as of 5.6.9)
ALTER SERVER ... OPTIONS(... PASSWORD ...) (as of 5.6.9)
これらのステートメント内のパスワードは、一般クエリーログ、スロークエリーログ、およびバイナリログについて、ステートメントテキストの文字どおりに表示されないように書き換えられます。ほかのステートメントについては書き換えが適用されません。
一般クエリーログの場合、パスワードの書き換えは、--log-raw
オプションを使用してサーバーを起動することによって抑制することができます。このオプションは、サーバーによって受け取られるステートメントの正確なテキストを表示する際の診断目的で役立つ場合がありますが、セキュリティー上の理由で本番用途では推奨されません。
監査ログプラグインによって生成される監査ログファイルの内容は、暗号化されません。セキュリティー上の理由から、このファイルは MySQL サーバーおよびログを表示する正当な理由を持つユーザーからのみアクセス可能なディレクトリに書き込むようにしてください。セクション6.3.12.2「監査ログプラグインのセキュリティーに関する考慮事項」を参照してください。
ログファイルが不当に公開されないよう保護するには、サーバーおよびデータベース管理者にのみアクセスを制限したディレクトリにログファイルを配置するようにしてください。mysql
データベース内のテーブルにログを記録する場合、これらのテーブルへのアクセス権を、管理者以外のアカウントに決して付与してはいけません。
レプリケーションスレーブは、レプリケーションマスターのパスワードをマスター情報リポジトリに格納し、このリポジトリは、ファイルまたはテーブルのいずれかになります (セクション17.2.2「レプリケーションリレーおよびステータスログ」を参照してください)。このリポジトリはデータベース管理者からのみアクセス可能になるようにします。MySQL 5.6.4 の時点では、パスワードのファイルへの保管に代わる方法は、START SLAVE
ステートメントを使用して、マスターに接続するための資格情報を指定する方法です。
パスワードを保管するテーブルまたはログファイルを含むデータベースバックアップは、制限アクセスモードを使用して保護するようにしてください。