这应该很简单,但我不能让它为我的一生工作。我只是想远程连接到我的MySQL服务器。
连接方式:mysql-u根-h本地主机-p工作正常,但尝试:mysql-uroot-h'这里的任何ip地址'-p失败,错误为:错误1130(00000):主机“xxx.xx.xxx.xxx”不允许连接到此MySQL服务器
在mysql.user表中,主机为“localhost”的用户“root”的条目与主机为“%”的用户完全相同。
我束手无策,不知道该怎么办。欢迎提出任何想法。
这应该很简单,但我不能让它为我的一生工作。我只是想远程连接到我的MySQL服务器。
连接方式:mysql-u根-h本地主机-p工作正常,但尝试:mysql-uroot-h'这里的任何ip地址'-p失败,错误为:错误1130(00000):主机“xxx.xx.xxx.xxx”不允许连接到此MySQL服务器
在mysql.user表中,主机为“localhost”的用户“root”的条目与主机为“%”的用户完全相同。
我束手无策,不知道该怎么办。欢迎提出任何想法。
当前回答
这里的所有答案在我的案例中都不起作用,所以我认为这可能会在未来帮助其他用户。这在我们的代码中也是一个问题,不仅仅是在MySQL中。
如果您正在使用VB.NET
代替此代码:
Dim server As String = My.Settings.DB_Server
Dim username As String = My.Settings.DB_Username
Dim password As String = My.Settings.DB_Password
Dim database As String = My.Settings.DB_Database
MysqlConn.ConnectionString = "server=" & server & ";" _
& "user id=" & username & ";" _
& "password=" & password & ";" _
& "database=" & database
MysqlConn = New MySqlConnection()
您需要在第一行移动MyqlConn=NewMySqlConnection()。所以会是这样的
MysqlConn = New MySqlConnection()
Dim server As String = My.Settings.DB_Server
Dim username As String = My.Settings.DB_Username
Dim password As String = My.Settings.DB_Password
Dim database As String = My.Settings.DB_Database
MysqlConn.ConnectionString = "server=" & server & ";" _
& "user id=" & username & ";" _
& "password=" & password & ";" _
& "database=" & database
其他回答
这适用于任何未来的远程mysql连接!
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
导航到以bind address指令开头的行。应该是这样的:
bind-address = 0.0.0.0
以root终端身份登录mysql
mysql -u root -p
-- root password
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' WITH GRANT OPTION;
CREATE USER 'username'@'%' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
最后,使用以下命令授予该计算机远程连接到数据库的独占权限。
sudo ufw allow from remote_IP_address to any port 3306
我也面临着同样的问题,它在2分钟内就解决了,我只是通过cpanel列出了白名单
假设您正在尝试从服务器A连接服务器B的数据库。转到服务器B Cpanel->远程MySQL->输入服务器A IP地址,就这样。
可能是安全预防措施。您可以尝试添加新的管理员帐户:
mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
-> WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
-> WITH GRANT OPTION;
尽管正如Pascal和其他人所指出的那样,让一个拥有这种访问权限的用户访问任何IP都不是一个好主意。如果您需要管理用户,请使用root,并将其保留在localhost上。对于任何其他操作,请精确指定所需的权限并限制用户的可访问性,正如Pascal在下面所建议的那样。
编辑:
从MySQL常见问题解答:
如果你不明白为什么访问被拒绝,从用户中删除表中包含主机的所有条目包含通配符的值(条目包含“%”或“_”字符)。A.非常常见的错误是插入新的主机=“%”且用户=“some_User”,认为这允许您将localhost指定为从同一台计算机连接。这个这不起作用的原因是默认权限包括带有Host='localhost'和用户=“”。因为该条目具有主机值'localhost',大于特定于“%”,它用于新条目的首选项从本地主机连接!正确的过程是插入第二个条目主机=“本地主机”且用户=“some_User”,或删除带有Host='localhost'和用户=“”。在删除条目之后,记住要发布FLUSH特权语句重新加载授权表。另请参见第5.4.4节“通道”控制,第1阶段:连接验证”。
如果您有WAMP服务器+Windows 10,并且正在使用它进行开发,请右键单击WAMP图标=>WAMP设置=>选中允许虚拟主机而不是127*
这里的大多数答案显示您使用两个主机值创建用户:一个用于localhost,一个用于%。
请注意,除了内置的localhost用户(如root用户),您不需要这样做。如果您只是想创建一个可以从任何地方登录的新用户,可以使用
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT <whatever privileges are appropriate> ON <relevant tables> TO myuser;
它会工作得很好。(正如其他人所提到的,向来自任何域的用户授予管理权限是一个可怕的想法。)