“拒绝用户‘root’@‘servername’访问(使用密码:否)” - 除非我正在使用密码

“拒绝用户‘root’@‘servername’访问(使用密码:否)” - 除非我正在使用密码

这很奇怪。我们的 Web 服务器运行的是 RHEL 5.5,并且安装了 MySQL 客户端版本 5.5.10(刚刚从 5.0 版本更新,它有同样的问题)。当我通过“mysql --host=dbserver -uroot -p”连接到数据库服务器(不是本地主机)并提供密码时,它会失败并显示“拒绝用户‘root’@‘servername’访问(使用密码:否)”。当然,我提供密码。如果我尝试使用其他帐户登录,并输入任何旧的垃圾密码,它会失败并显示“拒绝用户‘otheruser’@‘dbserver’访问(使用密码:是)”。那么,当我尝试以 root 身份登录时,究竟是什么让它拒绝提供密码?

为了进行比较,我们有另一台运行 Windows 2003 的内部服务器,并且安装了 MySQL 5.0.45。我可以从那里使用 root 帐户正常登录。我们的 Web 服务器上是否存在一些不为人知的 SELinux 设置,导致无法发送密码?

(不,我并没有尝试设置网站以 root 身份连接到数据库。有一个专门的用户负责此事。这只是有时可能需要进行测试/设置的事情。)

答案1

您需要明确授予用户从该主机连接的权限-像这样;(删除<>并用正确的字符串替换)

GRANT ALL PRIVILEGES ON <dbname>.* TO '<db-username>'@'<hostname>' IDENTIFIED BY '<user-password>' WITH GRANT OPTION;

答案2

停止 mysql 守护进程。

/etc/init.d/mysqld stop

启动 mysql 守护进程,无需授权检查。

mysqld --skip-grant-tables --user=root &

重置密码。新密码应该用单引号引起来。

mysql
mysql> UPDATE mysql.user SET Password='(hd3f6HD9Xdsr)' WHERE User='root';

mysql> FLUSH PRIVILEGES;

重新启动Mysql

/etc/init.d/mysqld stop
/etc/init.d/mysqld start

也可以在文件/root/.my.cnf中添加mysql用户和密码,如下图所示,这样就不用输入用户名和密码就可以登录了,以后只要输入mysql就可以了。

root@server [~]# cat /root/.my.cnf
[client]
user="root"
pass=":Kv95r6j"

相关内容