如何使MySQL客户端从mylogin.cnf读取密码?


11

我正在尝试使mysql客户端连接到mysql服务器,而不要求以交互方式提供密码。采取的步骤:

1)首先创建一个mylogin.cnf文件

$ mysql_config_editor set --user=<user> --password --host=<host>
Enter password:

2)文件创建成功:

$ ls -la .mylogin.cnf
-rw-------. 1 urmt urmt  136 Dec 19 11:01 .mylogin.cnf
$ mysql_config_editor print --all
[client]
user = <user>
password = *****
host = <host>

3)使用mysql客户端连接

$ mysql <dbname>
ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

是否存在使客户端忽略mylogin.cnf中的密码的默认值/配置?从文件中正确读取了用户和主机属性。

如果我在命令行中提供密码,则可以正常连接:

$ mysql -p <dbname>
Enter password: 
Reading table information...
...
mysql> 

在Oracle Linux 6上,MySQL客户端版本为5.6.22,MySQL服务器版本为5.6.22。客户端和服务器位于不同的主机上。

谢谢

Answers:


2

无论采取哪种方式,您都可能会将密码保存在某处。甚至有动机的人都可以轻松地解密MySQL 5.6登录路径。该警告说,这将是一个简单的解决方案。

在您的环境脚本(例如~/.profile~/.bashrc)中,设置

alias mysql='mysql -uUser -pPasswd -hHostname'

(当然,请输入所需的用户,Passwd和主机名。)

重新登录Shell之后,您应该可以轻松完成

mysql

...,它将使用您的别名并连接到数据库,并忽略.my.cnf文件中的所有密码。

安全说明:如果您的服务器上还有其他用户,则可能希望对您的配置文件脚本进行chmod 700修改,这样其他人就不会轻易访问该密码。具有root或sudo的任何管理员都将仍然可以看到它;没办法解决。


这是解决实际问题的方法,但是我很好。我接受此答案,但对未来的读者却不愿声明,这样做的正确方法是Nawaz答案,但是由于未知的原因,该方法不适用于我的环境。谢谢!
Lefteris Koutsoloukas

1
-1既不会回答OP的查询,也不会避免将密码存储在文件中。密码现在存储在.profile中,而不是.mylogin.cnf中。但是现在ps命令显示了密码。
miracle173

@miracle,请验证您的说法,即ps将显示密码。在我的系统上,密码在ps输出中显示为xxxxxxx。如果您的MySQL客户端不像我的MySQL客户端那样运行,请发布您正在运行的mysql版本和发行版。您对OP的实际问题有更好的答案吗?
2015年

2
@joshua:最终用户密码安全准则:“ 在命令行上使用-pyour_pass--password=your_pass选项(...),这很方便,但是不安全。”
miracle173

10

使用以下命令首先设置登录路径

mysql_config_editor set --login-path = lgpath --user = root -p
密码

然后使用下面的命令登录mysql

mysql --login-path = lgpath

可以看到有关mysql登录路径选项的帮助

mysql_config_editor set-帮助


我尝试按照您的建议明确设置登录路径,但不幸的是,它具有相同的行为:$ mysql_config_editor print --all [lgpath] user = <user> password = ***** host = <host> $ mysql --login -path = lgpath错误1045(28000):对用户'<user>'@'<host>'的访问被拒绝(使用密码:否)
Lefteris Koutsoloukas

3

我遇到了与OP相同的问题,但是此线程中的答案使我感到困惑。Vinay Mandala的链接实际上为我工作。为了清楚起见,此处重新发布。

我的问题:

ERROR 1045 (28000): Access denied for user '<user>'@'<host>' (using password: NO)

证明mysql_config_editor不能正确处理密码中的特殊字符。

解:

mysql_config_editor提示您输入密码时,请确保将密码用双引号(“)引起来。之后,您就可以正常登录了。


1

我收到此错误,但它说(使用密码:是)

乔瓦尼(Giovanni)提到的原因是因为密码中有一个“#”。我发现一种解决方法是在出现提示时在密码周围插入引号。使用.my.cnf的纯文本密码也存在相同的限制。


0

纳瓦兹的答案是正确的。我没什么可补充的。我建议您尝试使用环境变量MYSQL_TEST_LOGIN_FILE创建一个新的配置文件,以防默认文件损坏。也--no-defaults用于跳过.cnf文件。如果密码包含char #mysql login-path则不起作用。

$ export MYSQL_TEST_LOGIN_FILE=$HOME/mylogin.cnf

$ mysql_config_editor set --login-path=mytest --host=127.0.0.1 --port=5622 --user=mytest --password
Enter password:

$ ls -l $MYSQL_TEST_LOGIN_FILE
-rw------- 1 mysql mysql 288 Feb 27 14:25 mylogin.cnf

$ mysql --no-defaults --login-path=mytest test

未设置此环境变量。我设置了它,但行为却完全一样。它忽略了mylogin.cnf中的密码。
Lefteris Koutsoloukas

您确定exec mysql命令的用户是mysql吗?如果没有,请更改其所有者,mylogin.cnf它应该起作用:)
Iazel

0

我遇到了与原始海报类似的问题。我怀疑这与密码中未正确加密/解密的字符有关。

要确认,请尝试将密码更改为简单的密码,然后看问题是否消失。


我遇到过同样的问题。正如Plazgoth所指出的那样,我在密码中有一个特殊字符,并且该密码不起作用。对我有用的是用户bglad在此帖子
Vinay Mandala

0

我在shell脚本中遇到了这个问题。我的脚本正在更改$ HOME值,这导致--login-path = ***似乎被忽略了。当我停止更改$ HOME值时,它开始工作。


0

注意如果您试图pathlinux用户 下运行root -您不能简单地使用sudo。您必须以root IE 身份登录

user@server:$ sudo su
user@server:$ Enter Password
root@server:$ mysql_config_editor set --login-path=data-main --user=<user> --password --host=<host>
root@server:$ Enter Password
root@server:$ exit
user@server:$ ...

此外,在其他帖子提到在这里。你必须用双引号围绕mysql,如果它包含除字母数字字符以外的任何密码。

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.