web-dev-qa-db-ja.com

mysqlコマンドラインにパスワードを渡す方法

MySQLパスワードをファイルに保存しましたfoo.php、 例えば P455w0rd、私がそれを使おうとすると:

$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)

$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)

どちらのオプションでもパスワードを要求されますが、stdinからパスワードを送信する正しい方法は何ですか?

21
Kokizzu

コマンドラインにパスワードを渡す方法には細心の注意を払う必要があります。そうしないと、psなどのツールを使用して、スニッフィングができるようになるためです。


これを行う最も安全な方法は、新しい構成ファイルを作成し、--defaults-file=または--defaults-extra-file=コマンドラインオプションを使用してmysqlに渡すことです。

2つの違いは、デフォルトの構成ファイルに加えて後者が読み取られるのに対し、前者では、引数として渡された1つのファイルのみが使用されることです。

追加の構成ファイルには、次のようなものが含まれている必要があります。

[client]
user=foo
password=P@55w0rd

このファイルを保護していることを確認してください。

次に実行します:

mysql --defaults-extra-file=<path to the new config file> [all my other options]
26
garethTheRed

mysqlクライアントユーティリティは、-pまたは--password=オプションのいずれかを使用して、コマンドラインでパスワードを取得できます。

-pを使用する場合は、オプション文字の後に空白を入れないでください。

$ mysql -pmypassword

彼らは自己文書化しているので、スクリプトの長いオプションを好みます:

mysql --password=mypassword --user=me --Host=etc
16
Kusalananda

パスワードを指定してmysqlを開始する場合は、最初に変数でパスワードをフェッチする必要があります。

MYSQLPASS=`cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2`

次に、mysqlコマンドを次のように開始できます。

mysql -U root -p ${MYSQLPASS} mydb -h friendserver
2
Lambert

コメントする評判が足りないので あなた と申します。上記のコマンドを実行するときは、-defaults-extra-fileが最初のオプションである必要があることを伝えたかっただけです。私にとっては、それ以外の方法では機能しませんでした。

0
user8810865