在Bash脚本中存储MySQL密码

5
需要创建一个简单的mysql备份脚本。但是,我该如何在其中存储MySQL用户的加密密码呢?我希望避免以纯文本类型在任何附加文件中存储密码。根据我在MySQL手册中找到的内容:MySQL使用自己的算法加密存储在用户表中的密码。所以,有没有办法只是获取哈希并将其设置为变量?我的意思是:
DBHASH="cGFzc3dvcmQ="
DBPASS=`echo $DBHASH | openssl enc -base64 -d`

有没有正确的方法来解决这个问题?感谢提示。
2个回答

7
如果脚本包含可重复进入MySQL的例行程序(即自动解密),则明文密码是否存在都没有关系 - 攻击者只需执行相同的操作。如果您可以传递哈希/解密后的密码并让MySQL进行比较,那么这将是完全可重复的(而哈希将作为密码起作用)。
因此,简单的答案是:您无法这样做。您有一些选择:
- 设置具有准确的chmoded(600)的〜/.my.cnf凭据。 - 创建一个“受限制”的无密码备份帐户,该帐户仅允许从localhost登录。 - 无论哪种情况下,仅允许从localhost /备份主机进行备份登录。 - 如果您在Debian上,则可以使用debian-sys-maint帐户(该帐户已经设置了具有凭据的my.cnf)。 - 限制mysql帐户并在脚本中包含明文密码,但仅允许特定用户/ root读取脚本(如果您拥有root,则无论如何都可以接管mysql)。 - 从外部文件(具有正确的chmod-600)中读取/ 'source'配置变量(用户名/密码)...但到那时,您基本上正在执行my.cnf的事情。
请记住,“备份帐户”不需要写权限等...

好的,当然 - 这不完全是我想要的,但似乎没有其他实现方式...谢谢。 - setevoy

2

据我所知,没有办法实现你所需的功能。不管你是存储哈希值还是原始密码,你都会存储非常敏感的信息,如果有人获得了你的脚本的读取权限,这些信息可能会被恶意使用。

相反地,你可以设置一个无法登录的用户账户,并设置mysql,使该用户拥有你的脚本的确切权限。并且还要确保该用户是唯一拥有脚本执行权限的用户。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接