将MySQL密码存储在bash脚本中

时间:2013-12-09 13:24:27

标签: mysql bash passwords

需要创建简单的mysql-backup脚本。

但是 - 如何在其中存储MySQL用户的加密传递?

我希望在任何其他文件中避免使用纯文本类型的商店密码。

正如我在MySQL手册中找到的那样:

  

MySQL使用自己的算法

加密存储在用户表中的密码

因此。没有办法获得hash并将其设置为变量?

我的意思是:

DBHASH="cGFzc3dvcmQ="
DBPASS=`echo $DBHASH | openssl enc -base64 -d`

有没有正确的方法来解决它? 感谢您的提示。

2 个答案:

答案 0 :(得分:7)

如果脚本包含一个明文密码,如果它包含进入MySQL的可重复例程(即自动解密),则无关紧要 - 攻击者也会这样做。如果您可以传递散列/解密密码并进行MySQL比较,那么它就是可重复的(无论如何散列都将起到密码的作用)。

所以,简单的答案是:你不能这样做。你有一些选择...

  • 使用凭据设置正确的chmoded(600)〜/ .my.cnf
  • 创建一个“受限制”的无密码备份帐户,只允许从localhost登录。
  • 在任何一种情况下,只允许来自localhost / backup host的备份登录。
  • 如果您使用的是Debian,则可以使用 debian-sys-maint 帐户(其中已经设置了 my.cnf 凭证)
  • 限制mysql帐户并在脚本纯文本中包含密码,但只允许给定的用户/ root读取脚本(如果你有root,你可以接管mysql)。
  • 从外部文件中读取/'源'配置变量(用户名/密码)(正确的chmod - 600)...但你基本上是在做 my.cnf -thing然后。

请记住,“备份帐户”不需要写权限等...

答案 1 :(得分:2)

afaict,没有办法做你正在寻找的事情。无论您是存储哈希值还是原始密码,无论如何,如果有人获得对您脚本的读取权限,您仍会存储非常合理的信息,这些信息可能是邪恶的。

您可能更喜欢的是设置一个无法登录的用户帐户,并设置mysql,以便用户拥有脚本的完全权限。并且还使得该用户是唯一具有exec访问权限的用户。