我有一个 bash 脚本,它运行一堆 MySQL 命令,由用户输入分隔。
每次运行查询时,都必须重新输入密码。
我知道最好避免在命令行上输入密码,因此我谨慎地询问用户密码,然后在命令行上将其传递给每个命令。
有没有推荐的方法可以在不损害安全性的情况下做到这一点?
答案1
您可以将凭据存储在 中~/.my.cnf file
。如果命令中未指定其他凭据,Mysql 将默认查找此文件并使用其中指定的凭据。
答案2
答案3
最好不要在 shell 脚本中处理密码。
我有一个类似的问题:
根据我的使用情况,我决定使用 shell 脚本作为预期脚本的包装器。
它不是完全安全的(什么是完全安全的?)但是:
- 密码不会通过 ps 泄露。
- 密码没有在任何地方硬编码。
- 密码在 RAM 中的寿命不长 - 整个过程需要 30 秒。
- 该密码属于非特权账户
- 该脚本以非特权帐户运行
- 根权限被锁定在该盒子上的一小群员工手中。
- 执行该命令的盒子是内部的并且是坚固的
它安全吗?对我的情况来说,它的安全性已经足够好了。
有很多文档介绍了如何从安全性角度运行 shell 脚本。下面是其中一份:
答案4
您可以将用户输入(密码)存储在变量中,并将其作为参数传递给 MySQL CLI。这还不错。它不会危及安全性。
作为用户,当您输入命令时,它们会以~/.bash_history
纯文本形式输入。因此,作为用户,如果您将密码作为参数传递,它将存储在机器上的文件中。这并不比将密码存储在配置文件中更糟糕。
从用户体验的角度来看,让用户一遍又一遍地输入密码是很烦人的。将密码保存到变量中并传递给命令会更好,而且不会影响安全性。
值得注意的是,这会在每个 MySQL 命令运行时在进程列表中暴露密码。