パスワードを公開せずにcronジョブでmysqlダンプを実行する


11

走りたい

mysqldump -u aUser -p P4SSw0rd --all-databases > backup.sql

cronジョブで。どうすれば安全にこれを行うことができますか?

すぐそこにコマンドを配置できることは知っていますが、マシンにアクセスできる人は誰でもcrontabを介してすぐにそれを見ることができます。それを行うためのより良い方法はありますか?


1
あなたの例は間違っています。スペースなしの-pP4SSw0rdである必要があります。
サイモンウッドサイド

回答:


14

上述のようにman mysqldump:参照6.1.2.1を。MySQLリファレンスマニュアルのパスワードセキュリティのエンドユーザーガイドライン

オプションファイルは、特に上記の参考文献によると、最も安全な賭けです。crontabでプレーンテキストで指定するのは良くありません。特に、デフォルトではプロセスのコマンドラインpsが他のユーザーに表示されるためです。リファレンスで説明されているように、同じことが実際に環境変数に適用されます。

MySQLリファレンスマニュアルの関連部分:

オプションファイルにパスワードを保存します。たとえば、Unixでは、ホームディレクトリのファイルの[client]セクションにパスワードをリストできます.my.cnf

[client]
password=your_pass

パスワードを安全に保つために、ファイルは自分以外の誰もアクセスできないようにする必要があります。これを確実にするには、ファイルアクセスモードを400またはに設定します600。例えば:

shell> chmod 600 .my.cnf

パスワードを含む特定のオプションファイルをコマンドラインから指定するには、--defaults-file=file_nameオプションを使用します。ここfile_nameで、はファイルへのフルパス名です。例えば:

shell> mysql --defaults-file=/home/francis/mysql-opts

セクション4.2.3.3「オプションファイルの使用」では、オプションファイルについて詳しく説明します。

/programming//q/10725209も参照してください


psコマンドは1つのxでパスワードを難読化しているようです:ps:mysqldump -uroot -px xx mydb。しかし、それが良い保護だと言っているわけではありません(ジョブを入力すると、パスワードはプレーンテキストで表示されます)。

4

特定のユーザーとしてcronjobを実行し、単純なBashロジックを使用して、ユーザー(またはグループ)のみがアクセスできる権限を持つシステム上のどこかに保存されているプレーンテキストファイルからパスワードを抽出します。

PASS=`cat /path/to/pwdfile`

 mysqldump -u aUser -p $PASS--all-databases > backup.sql

したがって、cronjobがユーザー「example」として実行される場合、ファイルの所有権は「example:example」であり、許可された0400である必要があります。

ユーザーレベルの.my.cnfを使用して同様の機能を実現することもできます。


1
read PASS < /path/to/pwdfileは同じことをするための慣用的なクリーナーです(ほぼ間違いなく、superuser.com / q / 323060/49184が適用されます)。
ダニエルアンダーソン

*「慣用的によりクリーンな方法」...編集中に失われます。
ダニエルアンダーソン

Bashの最も基本的な理解さえ持っている人は、その猫で何が起こっているかを見ることができるはずです。:)
ギャレット

1
確かに、私はそれがそれをする最も一般的な方法であるとさえ言うでしょう、しかしそれはまだ目障りです:-)。1が行う場合UUOCをファイルがより大きいときの習慣は、それはかむARGMAXことのような構造を誘惑かもしれないが、それは内蔵のシェルを使用しての余分なプロセスを代わりに受け取り、for i in `cat file`; do ...として、などの問題、のしかし、もちろん、独自の配列を持ちますほとんどの場合:何が起こっているかを知っていれば、自由に選択できます。私は、それがどのように見えるかに関わらず、ここでの十字軍ではありません:-D。
ダニエルアンダーソン

0

マシンへのアクセス権を持つ誰もがアクセスの同じレベルを持っている/var/spool/cron/crontabs/のと/var/lib/mysqlそれらを持つことができます。そのため、ディレクトリに適切な権限を設定して完了します。ルートアクセス権を持つユーザーは、データベースファイルに直接アクセスできます。マシンへのアクセス権を信頼していない人は、マシンへのアクセス権を持ってはいけません。

通常、ユーザーはを介して自分のcronjobのみを表示しcrontab -lます。


0

バックアップのために、次のようにmysqlに読み取り専用ユーザーを持つことを検討してください。

CREATE USER bUser IDENTIFIED BY 'p4ss';

GRANT SELECT ON *.* TO bUser@localhost;
GRANT LOCK TABLES ON *.* TO bUser@localhost;

mysqldumpには、そのジョブを実行するための特権SELECTLOCK TABLES特権のみが必要です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.