有没有一种安全的方法来运行多个 MySQL CLI 命令而不必不断询问用户密码?

有没有一种安全的方法来运行多个 MySQL CLI 命令而不必不断询问用户密码?

我有一个 bash 脚本,它运行一堆 MySQL 命令,由用户输入分隔。

每次运行查询时,都必须重新输入密码。

我知道最好避免在命令行上输入密码,因此我谨慎地询问用户密码,然后在命令行上将其传递给每个命令。

有没有推荐的方法可以在不损害安全性的情况下做到这一点?

答案1

您可以将凭据存储在 中~/.my.cnf file。如果命令中未指定其他凭据,Mysql 将默认查找此文件并使用其中指定的凭据。

答案2

我没有 MySQL 服务器可以测试,但你应该可以

  1. 询问一次密码,
  2. 创建一个命名管道
  3. 将其链接到背景 mysql流程,以及
  4. 将所有 SQL 传递到命名管道。

答案3

最好不要在 shell 脚本中处理密码。

我有一个类似的问题:

https://security.stackexchange.com/questions/182927/what-would-be-a-secure-way-to-handle-password-prompts-in-shell

根据我的使用情况,我决定使用 shell 脚本作为预期脚本的包装器。

它不是完全安全的(什么是完全安全的?)但是:

  1. 密码不会通过 ps 泄露。
  2. 密码没有在任何地方硬编码。
  3. 密码在 RAM 中的寿命不长 - 整个过程需要 30 秒。
  4. 该密码属于非特权账户
  5. 该脚本以非特权帐户运行
  6. 根权限被锁定在该盒子上的一小群员工手中。
  7. 执行该命令的盒子是内部的并且是坚固的

它安全吗?对我的情况来说,它的安全性已经足够好了。

有很多文档介绍了如何从安全性角度运行 shell 脚本。下面是其中一份:

https://developer.apple.com/library/content/documentation/OpenSource/Conceptual/ShellScripting/ShellScriptSecurity/ShellScriptSecurity.html

另请考虑: https://security.stackexchange.com/questions/66832/are-shell-scripts-bash-inherently-less-secure-than-other-script-languages-su

答案4

您可以将用户输入(密码)存储在变量中,并将其作为参数传递给 MySQL CLI。这还不错。它不会危及安全性。

作为用户,当您输入命令时,它们会以~/.bash_history纯文本形式输入。因此,作为用户,如果您将密码作为参数传递,它将存储在机器上的文件中。这并不比将密码存储在配置文件中更糟糕。

从用户体验的角度来看,让用户一遍又一遍地输入密码是很烦人的。将密码保存到变量中并传递给命令会更好,而且不会影响安全性。

值得注意的是,这会在每个 MySQL 命令运行时在进程列表中暴露密码。

相关内容