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
からパスワードを送信する正しい方法は何ですか?
コマンドラインにパスワードを渡す方法には細心の注意を払う必要があります。そうしないと、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]
mysql
クライアントユーティリティは、-p
または--password=
オプションのいずれかを使用して、コマンドラインでパスワードを取得できます。
-p
を使用する場合は、オプション文字の後に空白を入れないでください。
$ mysql -pmypassword
彼らは自己文書化しているので、スクリプトの長いオプションを好みます:
mysql --password=mypassword --user=me --Host=etc
パスワードを指定してmysql
を開始する場合は、最初に変数でパスワードをフェッチする必要があります。
MYSQLPASS=`cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2`
次に、mysql
コマンドを次のように開始できます。
mysql -U root -p ${MYSQLPASS} mydb -h friendserver
コメントする評判が足りないので あなた と申します。上記のコマンドを実行するときは、-defaults-extra-fileが最初のオプションである必要があることを伝えたかっただけです。私にとっては、それ以外の方法では機能しませんでした。