存储MySQL客户端密码,或设置密码少认证


11

我正在使用mysql命令行客户端,不需要每次启动客户端时都需要提供密码。我有什么选择?


请接受您以前的一些问题的答案,因为其中一些答案似乎是正确的解决方案-单击答案左侧的勾号。
Shane Madden

Answers:


15

.my.cnf在您的主目录中创建一个名称如下的文件。确保设置了文件系统权限,以便只有拥有用户的用户才能读取它(0600)。

[client]
host     = localhost
user     = username.
password = thepassword
socket   = /var/run/mysqld/mysqld.sock
#database = mysql

由于您还标记了问题mysqldump,因此应查看此问题。

在没有root密码的cron作业中使用mysqldump

更新(2016-06-29)如果运行的是mysql 5.6.6或更高版本,则应查看mysql_config_editor工具,该工具可将凭据存储在加密文件中。感谢乔瓦尼向我提及这一点。


这很棒,它奏效了。.Thanku
行程

如果答案解决了您的问题,则应单击复选标记以接受它。
Zoredache

1
这会将密码存储为纯文本格式,从安全角度来看,我不建议这样做。
乔瓦尼

@Giovanni可以肯定,尽管您在回答中提到了mysql_config_editor,但只有在运行5.6.6时它才有用。今天仍然有具有较旧版本的发行版。
Zoredache

但是如何在Windows上完成呢?
Wolfpack'19年

9

您可以使用该mysql_config_editor实用程序将身份验证凭据存储在名为的加密登录路径文件中.mylogin.cnf

要创建一组新的凭据,请运行:

mysql_config_editor set --host=db.host.org --user=dbuser --password

并在出现提示时输入密码。

这会将您的身份验证凭据存储在默认client登录路径中。

您可以通过指定其他--login-path选项来存储多个身份验证凭据:

mysql_config_editor set --login-path=db2 --host=db2.host.org --user=dbuser --password

默认情况下,mysql客户端从其他选项文件中读取[client][mysql]组,因此它也从登录路径文件中读取它们。通过一个--login-path选项,客户端程序还可以从登录路径文件中读取命名的登录路径。从其他选项文件读取的选项组保持不变。考虑以下命令:

mysql --login-path=db2

mysql客户端读取[client][mysql]其他选项的文件,并[client][mysql]以及[mypath]从登录路径文件。

要打印出存储在配置文件中的所有信息,请运行:

mysql_config_editor print --all=true

有关该实用程序的更多信息,请参见“ mysql_config_editor-MySQL配置实用程序”


2

我们绝对不能假装.mylogin.cnf是安全的,因为我可以my_print_defaults -s [use your login-path]使该密码以纯文本形式显示。这就是MariaDB不支持这种“默默无闻的安全性”方法的原因。


那么,这个问题的答案什么?
Pierre.Vriens

0

还有另一种方法与上述方法正交,但是如果其他人正在监视您的显示器或保存历史记录则可能存在安全风险

不过,这是一个选项,可以防止提示,也是我在一次性Docker映像等中使用的一个。

mysql -u YOUR_USER --password=YOUR_PASSWORD_HERE your_database -e "your query" etc.

不会提示您,可以根据需要在Shell中设置临时别名。

请谨慎使用。

适用于使用readline 5.1的debian-linux-gnu(x86_64)的mysql Ver 14.14 Distrib 5.5.61-38.13

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.