这应该是死的简单,但我不能让它为我的生活工作.
我只是想远程连接到我的MySQL服务器.
连接为
mysql -u root -h localhost -p
工作正常,但尝试
mysql -u root -h 'any ip address here' -p
因错误而失败
ERROR 1130 (00000): Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server
在mysql.user
表中,主机'localhost'的用户'root'与主机'%'的另一个条目完全相同.
我在我的智慧结束,并不知道如何继续.欢迎任何想法.
可能是安全预防措施.您可以尝试添加新的管理员帐户:
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 FAQ:
如果您无法弄清楚拒绝访问的原因,请从用户表中删除所有包含通配符的Host值的条目(包含'%'或'_'字符的条目).一个非常常见的错误是插入一个新的条目,其中Host ='%'和User ='some_user',认为这允许您指定localhost从同一台机器连接.这不起作用的原因是默认权限包括Host ='localhost'和User =''的条目.因为该条目具有比'%'更具体的主机值'localhost',所以当从localhost连接时,它优先于新条目使用!正确的过程是插入第二个条目,其中Host ='localhost'和User ='some_user',或删除具有Host ='localhost'和User =''的条目.删除条目后,请记住发出FLUSH PRIVILEGES语句以重新加载授权表.另请参见第5.4.4节"访问控制,第1阶段:连接验证".
必须通过phpMyAdmin或命令提示符创建一个new MySQL User
并分配如下所示的权限Query prompt
:
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;
完成所有四个查询后,它应该连接 username / password
我的错误消息类似,并说即使我使用root,' 主机XXX也不允许连接到此MySQL服务器 '.以下是确保root具有正确权限的方法.
我的设置:
Ubuntu 14.04 LTS
MySQL v5.5.37
解
打开'etc/mysql/my.cnf'下的文件
检查:
端口(默认为'port = 3306')
bind-address(默认情况下,这是'bind-address = 127.0.0.1';如果你想打开所有,那么只需注释掉这一行.对于我的例子,我会说实际的服务器是在10.1.1.7)
现在访问实际服务器上的MySQL数据库(假设您的远程地址是123.123.123.123,端口3306为用户'root',我想更改数据库'dataentry'的权限.请记住更改IP地址,端口和数据库名称到你的设置)
mysql -u root -p Enter password:mysql>GRANT ALL ON *.* to root@'123.123.123.123' IDENTIFIED BY 'put-your-password'; mysql>FLUSH PRIVILEGES; mysql>exit
sudo service mysqld restart
您现在应该能够远程连接到您的数据库.例如,我正在使用MySQL Workbench并输入'Hostname:10.1.1.7','Port:3306','Username:root'
您需要从任何主机名授予对用户的访问权限.
这是您从phpmyadmin添加新权限的方式
转到权限>添加新用户
选择任意主机以获取所需的用户名
只需执行以下步骤:
1)连接到mysql
mysql -uroot -p
2)创建用户
CREATE USER 'user'@'%' IDENTIFIED BY 'password';
3)授予权限
GRANT ALL PRIVILEGES ON \*.\* TO 'user'@'%' WITH GRANT OPTION;
4)冲洗特权
FLUSH PRIVILEGES;
该消息*Host ''xxx.xx.xxx.xxx'' is not allowed to connect to this MySQL server
是MySQL服务器对MySQL客户端的回复.注意它是如何返回IP地址而不是主机名.
如果您尝试连接mysql -h
并且它使用IP地址返回此消息,则MySQL服务器无法在客户端上执行反向查找.这很关键,因为它是如何将MySQL客户端映射到授权的.
确保您可以nslookup
从MySQL服务器执行此操作.如果这不起作用,那么DNS服务器中没有条目.或者,您可以在MySQL服务器的HOSTS文件中放入一个条目(
< - 此处的顺序可能很重要).
我的服务器主机文件中的一个条目允许反向查找MySQL客户端解决了这个问题.
简单方法:
Grant All Privileges ON *.* to 'USER_NAME'@'%' Identified By 'YOUR_PASSWORD';
然后
FLUSH PRIVILEGES;
完成了!
如果手动修改授权表(使用INSERT,UPDATE等),则应执行FLUSH PRIVILEGES
语句以告知服务器重新加载授权表.
PS:我不建议允许任何主机连接任何用户(特别是不root
使用).如果您将mysql用于客户端/服务器应用程序,则更喜欢子网地址.如果您将mysql与Web服务器或应用程序服务器一起使用,请使用特定的IP.