如何将密码传递给mysql命令行


20

我将MySQL密码保存在文件中foo.php,例如P455w0rd,当我尝试使用它时:

$ cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2 | mysql -U root -p mydb -h friendserver
Enter password: (holds)

$ echo P455w0rd | mysql -u root -p mydb -h friendserver
Enter password: (holds)

这两个选项仍要求输入密码,从哪发送密码的正确方法是stdin什么?


3
-p密码之间不能有空格。
的Firat KUCUK

mysql无法从stdin中读取密码,我无法从密码中读取密码。
Omn

正确的答案是不要将您的密码放在命令行上/proc,只要程序正在运行,任何有权访问该密码的人都可以轻松读取它们。这就是a的意思~/.my.cnf,正确地修改为0600
Shadur

Answers:


25

您必须非常小心如何将密码传递给命令行,因为如果不小心,最终将使它无法使用诸如之类的工具进行嗅探ps


最安全的方法是创建一个新的配置文件,然后mysql使用--defaults-file=--defaults-extra-file=命令行选项将其传递给。

两者之间的区别在于,除了默认配置文件外,还会读取后者,而对于前者,仅使用作为参数传递的一个文件。

您的其他配置文件应包含类似于以下内容的文件:

[client]
user=foo
password=P@55w0rd

确保您保护此文件。

然后运行:

mysql --defaults-extra-file=<path to the new config file> [all my other options]

2
MySQL将对其argv进行修改以覆盖提供给该-p标志的参数。至少,这是怎么在这里得出的结论,再加上其他相关信息:unix.stackexchange.com/questions/78757/...
Kusalananda

这是最好的解决方案,因为它提供了一种安全措施。您需要使用chmod go-rwx,并确保此参数位于所有其他参数之前。
ChuckCottrill

1
@Kusalananda,是的,但是根据对unix.stackexchange.com/q/385339/135943的评论,这并不意味着它是安全的!
通配符

现在可能值得添加注释,--login-path因为它已受支持。它没有比这更好的了,但是纯文本要少一些(即使将内容转换为纯文本的障碍很低)。
杰弗里·怀斯曼

6
在环境(export MYSQL_PWD=muhpassword)中设置MYSQL_PWD,并在不使用的情况下执行命令-p。参见MySQL程序环境变量。尽管有本手册的可怕警告,这还是相当安全的。除非稍后再在同一shell中启动怪异的warez。因此我们运行:MYSQL_PWD=$(cat foo.php etc) mysql -u foouser -h barhost
David Tonhofer

12

mysql客户端程序可以采取在命令行上输入密码与任一-p--password=选项。

如果使用-p,则选项字母后不能有任何空格:

$ mysql -pmypassword

我喜欢脚本中的长选项,因为它们是自我记录的:

mysql --password=mypassword --user=me --host=etc

3
这是不安全的,因为任何用户都可以直接通过/proc/$pid/cmdline或通过ps命令查看密码。的确,mysql在启动过程中会覆盖argv中的密码,但是总是有一个时间窗口,其他用户可以观察到该密码。同样,在某些系统上,argv覆盖可能不起作用。
maxschlepzig

3

如果要以mysql提供的密码开头,则必须首先在变量中获取密码:

MYSQLPASS=`cat foo.php | grep '$dbpwd=' | cut -d '"' -f 2`

然后,您可以mysql使用以下命令启动命令:

mysql -U root -p ${MYSQLPASS} mydb -h friendserver

1
这也会危害您的密码安全性。请注意,如果您未指定MYSQL_PWD,则会读取环境变量。在Linux下,这是一种安全的方法,因为与参数向量相比,其他未使用权限的用户无法读取用户的环境。mysql-p
maxschlepzig
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.