Mysql - 用户'root'@'xxxx'的访问被拒绝

bra*_*boy 14 mysql permissions

我正在尝试从本地机器连接到远程 mysql 数据库。最初我什至无法访问 mysql 数据库。但是在 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)
Run Code Online (Sandbox Code Playgroud)

我的IP被列入黑名单还是什么?我可以更改它,因为我对远程框有管理员权限。来人帮帮我。

ran*_*omx 22

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

skip-grant-tables
Run Code Online (Sandbox Code Playgroud)

我建议做一点侦察,看看你有哪些用户:

SELECT user,host,password FROM mysql.user WHERE user = 'root' ORDER BY host ASC;
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

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

GRANT ALL PRIVILEGES ON *.* TO root@'localhost' IDENTIFIED BY 'your_password' WITH GRANT OPTION;
Run Code Online (Sandbox Code Playgroud)

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

SET PASSWORD FOR root@'localhost' = PASSWORD('your_password');
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)

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


小智 9

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

mysql> 使用 mysql;
mysql> SELECT host FROM user WHERE user = 'root';

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

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

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

  • @Bragboy 您可能还需要为帐户设置密码,而不仅仅是让帐户无密码。默认情况下,每个授权条目也有一个单独的密码。在mysql docs中查找`GRANT`命令,我现在忘记了确切的子句(我通常使用phpmyadmin管理用户) (3认同)
  • 也不要忘记刷新特权。mysql> 刷新特权; (2认同)