远程连接MySQL数据库1130错误解决方法以及相关知识学习
- 问题描述
- 分析原因
- 解决方法
- 情况1:
- 情况2:
- 方法1:
- 方法2:
问题描述
在进行MySQL数据库的远程连接操作时,出现错误:“ERROR 1130: Host xxx.xxx.xxx.xxx is not allowed to connect to this MySQL server”。
分析原因
问题显示为我们无法连接MySQL服务器,显示不被允许,说明没有访问权限。
主要是MySQL服务器端远程连接权限没有对外开放。
解决方法
通过修改MySQL数据库访问权限即可。
使用命令:
mysql -uroot -p
登入数据库。(会弹出输入数据库密码的提示。输入密码即可。)
如果用户是root,
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '数据库密码' WITH GRANT OPTION;
这个时候,就会出现不同的情况(逐个分析)。
情况1:
没有报错。(这是最好的)那直接刷新权限:
flush privileges;
情况2:
出现了新的错误:
ERROR 1819 (hy000): Your password does not satisfy the current policy requirements。
出现这种情况的原因,与MySQL数据库的validate_password_policy的值有关系。
validate_password_policy表示密码强度等级检查,有以下取值:
0或者LOW表示密码任意,只要求长度合格即可;
1或者MEDIUM表示密码在符合长度的基础上,还要含有数字,小写字母或者大写字母,特殊字符;
2或者STRONG表示在1的基础上还要求用于密码强度的字典文件路径。
而MySQL默认是1(MEDIUM),所以设置的密码长度必须符合长度在8位及8位以上,大小写字母,特殊字符,数字。(而我出现这个问题的原因在于,我修改后的密码是123456,无论是长度还是其他都不符合MEDIUM级别的要求,所以会报错)。
针对于我出现问题的原因,可以有两个解决办法
方法1:
既然是现在的密码不符合当前密码强度的级别要求,则可以修改密码,符合要求,从而解决错误。
比如:可以修改密码为:Test112233…
进入MySQL,输入:
set password for root@localhost=password('Test112233..');
然后重新授予root用户远程访问权限:
grant all privileges on *.* to 'root'@'%' identified by 'Test112233..';
刷新权限,使设置生效。
flush privileges;
这样,就可以解决1819错误。
方法2:
同样地,既然不符合当前密码强度的级别要求,而不像修改密码,那么可以降低密码强度的级别要求。从1(MEDIUM)降为0(LOW),只对密码的长度做要求。
在MySQL中输入:
set global validate_password_policy=0;
更改密码强度要求。
这个时候,再次进行Navicat远程连接MySQL数据库,发现还是有错误(我的密码是123456,长度为6)。
原来,MySQL中默认对密码的长度要求是8,如果低于8位的话,其实还是不符合密码强度要求的,所以还是有错。
我们可以通过以下命令查看密码长度要求:
select @@validate_password_length;
如果没有修改的话,会出现如图结果。
然后修改密码长度要求:
set global validate_password_length=4;
这样,就修改了密码长度要求,此时再进行授予权限操作。
grant all privileges on *.* to 'root'@'%' identified by '123456';
刷新权限,使设置生效。
flush privileges;
注意,
validate_password_length=1,还是2,3,4 ,‘使密码长度生效’这个参数的实际值都是4。超过4后设置是多少实际就是多少。