MySQL 在使用 heredoc 时提示输入密码



我正在尝试执行一个shell脚本以root身份登录mysql并执行一些命令,为了避免将root的密码放在命令行中,我正在使用heredoc格式,如下所示。但是,mysql 会提示我输入密码,尽管我给了它正确的密码。

完全相同的语法在其他一些主机上完美运行,但在这里不是。

为什么?

mysql@myhost:MySQL> mysql -uroot -p -s -P3306 -e 'SELECT NOW();'  <<EOF
> MyPassword
> EOF
Enter password:    <---- why does it require manual password entry in here?
2014-12-23 14:57:25

假设您使用 BASH 或 KSH 命令行界面:

read -s pwd;mysql -uroot --password=${pwd} -s -P3306 -e 'SELECT NOW();'

对于 read 命令,您应该使用 -s 选项,因为就像使用 heredoc 一样,如果您不使用该选项,此解决方案也会在键入密码时显示密码。

此解决方案之所以有效,是因为 mysql 客户端会混淆密码,因此它不会显示在进程列表命令(如 ps)的输出中。运行以下命令:

read -s pwd;mysql -uroot --password=${pwd} -s -P3306

然后,如果您打开一个额外的命令行界面并执行 ps,您将看到它在进程列表中没有显示密码,而是显示它的混淆版本。

这是

mysql 客户端的一个著名错误,但在 2002 年得到了修复。

使用 read -s 将密码放入变量中还有一个额外的好处,即不会在命令行界面的历史记录中显示密码。

相关内容

  • 没有找到相关文章

最新更新