仅对某些密码的用户“root”@“localhost”访问被拒绝

时间:2014-08-20 23:06:57

标签: mysql

我刚安装了一个带有MySQL 5.6.19的Ubuntu 14.04的全新安装。完成安装后,我执行了mysql_secure_installation,它引导我完成了一些安全设置并让我设置了root密码。我的root密码目前包含@和$符号。当我尝试执行

mysql -u root -pAP@$$Here

我收到以下错误

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

为什么我收到此错误?

如果我再次在命令行上运行mysql_secure_installation并通过删除@和$符号来更改root密码,我可以在运行时正常连接

mysql -u root -pAPassHere

在相关但又单独的问题上,我还尝试通过发出命令进行连接:

mysql -u root

我原本希望提示输入密码,但我收到了以下相关错误

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

为什么我没有被要求输入密码?

3 个答案:

答案 0 :(得分:3)

请注意,某些符号(如$)在shell中具有特殊含义,并且在将字符串传递给程序之前,shell会将变量扩展为其值。

例如,试试这个:

$ echo AP@$$Here
AP@6282Here

$$替换为运行此命令的bash shell的进程ID。如果要抑制变量扩展,请将字符串放在单引号中:

$ echo 'AP@$$Here'
AP@$$Here

这也适用于MySQL客户端:

$ mysql -u root -p'AP@$$Here'

请注意,-p与引用密码之间仍然没有空格。

您还可以使用-p以下没有字符串的方式让MySQL客户端以交互方式提示您:

$ mysql -p
Enter password: 

最后,您可以方便地在$ HOME / .my.cnf中输入密码,然后您就不必输入密码。这也绕过shell变量扩展,并从字面上获取配置文件中的值。

$ cat >> $HOME/.my.cnf
[client]
user = root
password = AP@$$Here
^D

答案 1 :(得分:2)

shell将

$$解释为变量($$将返回我认为的当前进程的PID),因此您希望用以下引号括起您的密码:

mysql -uroot -p 'foo$$bar'

由密码提示(一个更安全的选项,因为它不会存储在你的shell的历史记录中)连接指定密码标志但没有值:

mysql -uroot -p

然后系统会提示您输入密码

答案 2 :(得分:0)

只有在没有任何后续操作的情况下,才会提示您输入密码。尝试使用"包装您的用户名和密码并使用以下内容:

mysql --user=root --password="AP@$$Here"