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


20

foo.phpたとえばP455w0rd、使用しようとすると、MySQLパスワードがファイルに保存されます。

$ 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ですか?


3
-pとパスワードの間に空白があってはなりません。
FıratKÜÇÜK

mysqlは標準入力からパスワードを読み取りません。読み取り元が何であるかを把握できませんでした。
Omn

適切な答えは、プログラムが実行されている限り、コマンドラインにパスワードを入れないでください/proc。それがaの~/.my.cnf目的です。適切に0600にchmodされます
Shadur

回答:


25

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


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

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

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

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

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

次に実行します:

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

2
MySQLはargv-pフラグに指定されたパラメーターを上書きするように変更します。少なくとも、一緒に他の関連する情報を、ここで締結しているものだという。unix.stackexchange.com/questions/78757/...
Kusalananda

これは、セキュリティの尺度を提供するため、最適なソリューションです。go-rwxをchmodし、この引数が他のすべての引数に優先することを確認する必要があります。
ChuckCottrill

1
@Kusalananda、はい、しかしunix.stackexchange.com/q/385339/135943のコメントによると、それそれが安全であることを意味しません
ワイルドカード

--login-path現在サポートされていることについてメモを追加する価値があるかもしれません。これよりはるかに優れているわけではありませんが、プレーンテキストよりも若干劣ります(コンテンツをプレーンテキストに変換するための障壁が低い場合でも)。
ジェフリーワイズマン

6
環境(export MYSQL_PWD=muhpassword)でMYSQL_PWDを設定し、.sql なしでコマンドを実行します-pMySQLプログラムの環境変数を参照してください。マニュアルの悲惨な警告にもかかわらず、これはかなり安全です。後で同じシェルで変なウェアーズを起動しない限り。我々は実行して:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
デビッドTonhofer

12

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

を使用する場合-p、オプション文字の後に空白スペースがあってはなりません。

$ mysql -pmypassword

自己文書化されているため、スクリプトの長いオプションを好みます。

mysql --password=mypassword --user=me --host=etc

3
これは、ユーザーが直接/proc/$pid/cmdlineまたはpsコマンドを介してパスワードを表示できるため、安全ではありません。mysqlが起動時にargvのパスワードを上書きするのは事実ですが、別のユーザーがパスワードを確認できる時間枠が常に存在します。また、一部のシステムでは、argvの上書きが機能しない場合があります。
maxschlepzig

3

指定さmysqlれたパスワードで開始する場合は、最初に変数でパスワードを取得する必要があります。

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

次に、mysql次のコマンドを使用してコマンドを開始できます。

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

1
またこれはパスワードのセキュリティを危険にさらします。指定しない場合にMYSQL_PWD読み取られる環境変数があることに注意してください。Linuxでは、引数ベクトルとは対照的に、ユーザーの環境を他の特権のないユーザーが読み取ることができないため、これは安全な方法です。mysql-p
maxschlepzig
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.