Mysql-拒绝用户‘root’@‘xxxx’的访问

Mysql-拒绝用户‘root’@‘xxxx’的访问

我正在尝试从本地计算机连接到远程 mysql 数据库。最初我甚至无法访问 mysql db。但在注释 my.cnf 文件中的 binding_address 并重新启动 mysql 服务器后,我现在可以访问它了。

但是现在,我收到“访问被拒绝”错误

mysql -u root -h x.x.x.x -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'x.x.x.x' (using password: YES)

我的 IP 被列入黑名单了吗?我可以更改它,因为我有远程机器的管理员权限。有人能帮帮我吗?

答案1

仔细检查以确保 root 可以从本地主机以外的主机/IP 访问。

mysql> 使用 mysql;
mysql> 从用户中选择主机,其中用户 = 'root';

如果它只返回一行带有“localhost”,则需要向您连接的 IP 授予权限。

mysql> GRANT SELECT, INSERT ON mydatabase。* TO 'root'@'10.0.0.1';

将 mydatabase 替换为您要访问的数据库(或输入通配符),然后将 IP 替换为您的客户端连接的地址或子网。

答案2

首要任务是获得完全权限。如果不能,请将此行添加到 my.cnf 并重新启动 mysql:

skip-grant-tables

我建议做一些侦察来查看你有哪些用户:

SELECT user,host,password FROM mysql.user WHERE user = 'root' ORDER BY host ASC;

这将显示您的用户列表,如下所示:

mysql> SELECT user,host,password FROM mysql.user WHERE user = 'root' ORDER BY host ASC;
+------+------------+-------------------------------------------+
| user | host       | password                                  |
+------+------------+-------------------------------------------+
| root | 127.0.0.1  |                                           |
| root | ::1        |                                           |
| root | localhost  | *E0AD777475E6713F9B04317EE38888D61042DAC1 |
| root | randym-mbp |                                           |
+------+------------+-------------------------------------------+
4 rows in set (0.01 sec)

您需要在列表中看到 localhost。如果没有,请按如下方式添加:

GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION;

否则,只需像这样更新密码:

SET PASSWORD FOR root@'localhost' = PASSWORD('your_password');
FLUSH PRIVILEGES;

然后从 my.cnf 中删除 skip-grant-tables 并重新启动 mysql。

答案3

中的密码mysql是按 IP 设置的。通常,它们仅用于通过本地主机访问,尤其是对于 root 用户。验证root@%您的权限表中是否设置了条目。

如果你确实需要允许远程 root 访问,那么考虑更改用户名,以便人们无法轻易猜出您的服务器超级用户帐户。

答案4

您可能需要为该 IP 授予权限,例如:

mysql> 将 dbname.* 上的所有权限授予 root@'%'; mysql> FLUSH 权限;

授予所有 IP

相关内容