我正在尝试从本地计算机连接到远程 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