MySQL ユーザーは、パスワードをセキュアな状態にするために次のガイドラインを使用することをお勧めします。
クライアントプログラムを実行して MySQL サーバーに接続する場合、ほかのユーザーからの検出によって公開されるような方法でパスワードを指定することはお勧めできません。 クライアントプログラムを実行するときにパスワードを指定するために使用できる方法と、それぞれの方法のリスクの評価について、次の一覧で示します。 簡単に言えば、もっとも安全な方法は、クライアントプログラムがパスワードを求めるプロンプトを出すようにするか、適切に保護されたオプションファイルにパスワードを指定する方法です。
mysql_config_editor ユーティリティを使用すると、
.mylogin.cnf
という名前の暗号化されたログインパスファイルに認証資格証明を格納できます。 このファイルは、MySQL Server に接続するための認証情報を取得するために、MySQL クライアントプログラムによってあとで読み取ることができます。 セクション4.6.7「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください。-
コマンドラインで
--password=
またはpassword
-p
オプションを使用します。 例:password
shell> mysql -u francis -pfrank db_name
警告これは便利ですがセキュアではありません。 一部のシステムでは、使用しているパスワードが、コマンド行を表示するためにほかのユーザーによって起動できる ps などのシステムステータスプログラムによって表示可能になります。 MySQL クライアントは通常、クライアントの初期化シーケンス中にコマンド行パスワード引数をゼロで上書きします。 ただし、まだ値が表示可能な短い期間があります。 また、一部のシステムではこの上書きの方法には効果がなく、パスワードは ps から表示可能になったままになります。 (SystemV Unix システムおよびおそらくほかのシステムでもこの問題の影響があります。)
ターミナルウィンドウのタイトルバーに現在のコマンドを表示するようにオペレーティング環境がセットアップされている場合、コマンドがウィンドウのコンテンツ領域からスクロールアウトされて表示されなくなっても、コマンドが実行中であるかぎりパスワードが表示されたままになります。
-
パスワード値を指定せずに、コマンドラインで
--password
または-p
オプションを使用します。 この場合、クライアントプログラムはパスワードを対話的に要求します。shell> mysql -u francis -p db_name Enter password: ********
*
文字はパスワードを入力したことを示しています。 パスワードは入力時に表示されません。この方法でパスワードを入力する方が、コマンド行でパスワードを指定するよりもセキュアです。これは、パスワードがほかのユーザーに表示されないためです。 ただし、このパスワード入力方法は、対話的に実行するプログラムについてのみ適しています。 非対話的に実行するスクリプトからクライアントを呼び出す場合、キーボードからパスワードを入力する機会はありません。 一部のシステムでは、スクリプトの 1 行目が (誤って) パスワードとして読み取られて解釈されることすらあります。
-
パスワードをオプションファイルに格納します。 たとえば Unix の場合、ホームディレクトリの
.my.cnf
ファイルの[client]
セクションにパスワードを一覧表示することができます。[client] password=password
パスワードを安全に保持するには、自分以外のすべてのユーザーからファイルにアクセス可能にしてはいけません。 このようにするには、ファイルのアクセスモードを
400
または600
に設定します。 例:shell> chmod 600 .my.cnf
パスワードを格納する特定のオプションファイルをコマンド行から指定するには、
--defaults-file=
オプションを使用します。ここでfile_name
file_name
はファイルへのフルパス名です。 例:shell> mysql --defaults-file=/home/francis/mysql-opts
セクション4.2.2.2「オプションファイルの使用」には、オプションファイルについてさらに詳しく記載されています。
Unix の場合、mysql クライアントは実行済みステートメントを履歴ファイルに書き込みます (セクション4.5.1.3「mysql クライアントロギング」を参照してください)。 デフォルトでは、このファイルは .mysql_history
という名前で、ユーザーのホームディレクトリに作成されます。 パスワードは、CREATE USER
や ALTER USER
などの SQL ステートメントにプレーンテキストで記述できるため、これらのステートメントを使用すると、履歴ファイルに記録されます。 このファイルを安全に保持するには、以前 .my.cnf
ファイルについて説明したのと同じ方法である制限アクセスモードを使用します。
コマンドインタプリタで履歴が保持されている場合、コマンドが保存されるすべてのファイルには、コマンドラインで入力された MySQL パスワードが含まれます。 たとえば、bash は ~/.bash_history
を使用します。 そのようなすべてのファイルは、制限アクセスモードにするようにしてください。