2

mysqldumpスペースを含むバックアップ ユーザー パスワードを使用してスクリプトを動作させようとしているだけです。選択肢があれば、変更するだけですが、変更しません。

Bashと引用符の素晴らしい世界を整理しようとして頭が回転しています。実行するには次のものが必要です...

mysql -u backupuser -p'This is a terrible password with spaces' -e ...

...しかし、代わりに変数を使用します:

MYPASS="'This is a terrible password with spaces'"(<-- これ、および私が試した約 9,307 のバリエーションは機能しません)

mysql -u backupuser -p$MYPASS -e ...

4

2 に答える 2

4

コマンド ライン経由でパスワードを渡すことは安全ではないと見なされます。他のユーザーは、ps afxまたは/procファイル システムを使用してパスワードをプレーン テキストで見ることができるからです。最近、このトピックに関するブログ記事を書きました。

ただし、コマンドを機能させるには、bashがスペースで区切られたパスワードを複数の引数として解釈しないように、二重引用符"で囲む必要があります。$MYPASS

MYPASS="foo bar password"
mysql -u backupuser -p"$MYPASS" -e ...

ただしexpect、パスワードをに渡すために使用する次のようなソリューションを強くお勧めしmysqldumpます。

#!/bin/bash

# mysql credentials and connection data
db_host="localhost"
db_name="testdb"
db_user="jon"
db_pass="secret"

# I'm using a here-document to pass commands to expect. 
# (the commands could be stored in a file as well)
expect <<EOF
# disable command output
log_user 0
# start the mysqldump process
spawn mysqldump -h$db_host -u$db_user -p $db_name
# wait for the password prompt
expect "password:"
# send the password (mind the \r)
send "$db_pass\r"
# enable output again
log_user 1
# echo all outout until the end
expect eof
EOF

expectは、人間のユーザーが行うのと同じ方法でパスワードを渡しますmysqldump。プロンプトが表示された後、stdin に書き込みます。他のユーザーが except スクリプトにアクセスできないようにすると、パスワードをプレーン テキストで表示するオプションがなくなります。

于 2013-07-23T15:04:54.693 に答える
1

私は一緒に行きます

mysql -u backupuser -p -e ...

コマンドライン引数に入力するのではなく、プロンプトでパスワードを指定します。

への引数としてパスワードを指定するとmysql、スクリプトの実行中にマシンにログインしているほぼすべてのユーザーが、簡単な方法でパスワードを取得できます。ps aux

于 2013-07-23T15:14:04.760 に答える