web-dev-qa-db-ja.com

コマンドラインでMySQLパスワードを使用する安全な方法は何ですか?

PHPコマンドラインスクリプトを使用してデータベースをバージョン管理します。開発者が新しいデータベースパッチを追加するたびにこのスクリプトを実行します。

スクリプトは、MySQLコマンドラインでパッチを実行します。

system('mysql --user=xxx --password=xxx < patch.sql');

ただし、MySQL 5.6は次の警告を発行します。

警告:コマンドラインインターフェースでパスワードを使用すると安全でない場合があります

これは明らかに本当ですが、ユーザーにとって問題である場合とそうでない場合があります。

  • ではsecureの代わりは何ですか?
  • または、この警告を無効にすることはできますか?

外部パスワードファイルに依存する必要がないことに注意してください。

36
Benjamin

最近のGA MySQLのバージョン、つまりversion5.6http://dev.mysql.com/doc/refman/5.6/en/mysql-config-editorで説明されているように、mysql_config_editorコマンドを使用してこれを行うことができます.html

基本的には、ホストエイリアスを使用してユーザー/パスの資格情報を暗号化し、ホストエイリアスを使用して、この情報をホームディレクトリの構成ファイルに入れ、必要なときに、次のようなことをするのではなく、 :

mysqldump -uroot --password=mycleartextpass mydatabase > dumpfile.sql

あなたは代わりに書く:

mysqldump --login-path=myhostalias mydatabase > dumpfile.sql

それにより、パスワードを平文でスクリプトに入れることを避けます。

これを機能させるには、最初に(一度だけ)myhostaliasを次のように定義する必要があります。

mysql_config_editor set --login-path=myhostalias --Host=mysqlhost.localnet.com --user=root --password

必要に応じて、アカウントやホストごとに異なるログインパスを使用できます。あなたが私に尋ねればかなり良い考え。

注意として、この機能は5.6より前のバージョンには存在しない[〜#〜] [〜#〜]とは考えられません。

18

--defaults-fileまたは--defaults-extra-fileオプションを使用します。その中にユーザーIDとパスワードを指定できます。 /etc/my.cnfと同じ形式です。

さらに読むと、外部のパスワードファイルに依存する必要がないと言いますが、それが唯一の本当に安全な方法です。それ以外のものは、プロセステーブルなどにトレースを残します。本当に必要な場合は、パスワードファイルをバージョン管理することもできます。それを600(または400)にし、mysqlまたはそれを実行しているユーザーのみが読み取り可能にします。

9
lsd

ごとに4つのオプションがありますhttp://dev.mysql.com/doc/refman/5.1/en/password-security-user.html

  • コマンドラインで-pyour_passまたは--password=your_passオプションを使用する
  • パスワード値を指定せずにコマンドラインで-pまたは--passwordオプションを使用します。この場合、クライアントプログラムはインタラクティブにパスワードを要求します。
  • パスワードをオプションファイルに保存します。
  • パスワードをMYSQL_PWD環境変数に保存します

必要に応じて、MYSQL_PWDを選択することもできますが、これは安全ではありません。実際には、--passwordを使用してインタラクティブプロセスを生成し、パスワードをインタラクティブに送信する必要がありますが、これはこの問題の解決策としてはかなり複雑です。

6
R. S.

PHPスクリプトがすでに開いているデータベース接続を持っている場合、mysqli_multi_query()を使用して.sqlファイルをインポートしないのはなぜですか?.sqlファイルの構文がもちろん有効...

4
Michael Hampton