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