MySQL 8.0 リファレンスマニュアル


MySQL 8.0 リファレンスマニュアル  /  ...  /  パスワードセキュリティーのためのエンドユーザーガイドライン

6.1.2.1 パスワードセキュリティーのためのエンドユーザーガイドライン

MySQL ユーザーは、パスワードをセキュアな状態にするために次のガイドラインを使用することをお勧めします。

クライアントプログラムを実行して MySQL サーバーに接続する場合、ほかのユーザーからの検出によって公開されるような方法でパスワードを指定することはお勧めできません。 クライアントプログラムを実行するときにパスワードを指定するために使用できる方法と、それぞれの方法のリスクの評価について、次の一覧で示します。 簡単に言えば、もっとも安全な方法は、クライアントプログラムがパスワードを求めるプロンプトを出すようにするか、適切に保護されたオプションファイルにパスワードを指定する方法です。

  • mysql_config_editor ユーティリティを使用すると、.mylogin.cnf という名前の暗号化されたログインパスファイルに認証資格証明を格納できます。 このファイルは、MySQL Server に接続するための認証情報を取得するために、MySQL クライアントプログラムによってあとで読み取ることができます。 セクション4.6.7「mysql_config_editor — MySQL 構成ユーティリティー」を参照してください。

  • コマンドラインで --password=password または -ppassword オプションを使用します。 例:

    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 USERALTER USER などの SQL ステートメントにプレーンテキストで記述できるため、これらのステートメントを使用すると、履歴ファイルに記録されます。 このファイルを安全に保持するには、以前 .my.cnf ファイルについて説明したのと同じ方法である制限アクセスモードを使用します。

コマンドインタプリタで履歴が保持されている場合、コマンドが保存されるすべてのファイルには、コマンドラインで入力された MySQL パスワードが含まれます。 たとえば、bash~/.bash_history を使用します。 そのようなすべてのファイルは、制限アクセスモードにするようにしてください。


関連キーワード:  パスワード, 認証, セキュリティー, ユーザー, 方法, プラガブル, 監査, コマンド, 表示, アカウント