在navicat工具中,设置mysql允许外部访问。
一、在navicat上使用本地连接,先连接上。
二、修改user表访问权限。
select * from user; # 查询mysql库中的user表是否有user为root的,host为%的数据。 # 如果没有,则进行创建。 create user 'root'@'%' identified by '密码' ; # 密码使用自己设置的数据库密码 # 创建好后,或者有的话,则再执行授权语句 grant all privileges on *.* to 'root'@'%' with grant option; # flush privileges;
然后外部就可以通过账户密码访问了。
说明:
1、※ grant语法: grant 权限名(所有的权限用all) on 库名(*全部).表名(*全部) to ‘要授权的用户名’@’%’(%表示所有的ip,可以只设一个ip) identified by “密码”;
2、其它说明:
flush privileges; 命令本质上的作用是:
将当前user和privilige表中的用户信息/权限设置从mysql库(mysql数据库的内置库)中提取到内存里。
mysql用户数据和权限有修改后,希望在”不重启mysql服务”的情况下直接生效,那么就需要执行这个命令。
通常是在修改root帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。
而不必冒太大风险。
三、可能存在的其它问题:
执行完之后,再用navicat连接mysql,报错如下:
client does not support authentication protocol requested by server;
报错原因:
mysql8.0 引入了新特性 caching_sha2_password;这种密码加密方式navicat 12以下客户端不支持;
navicat 12以下客户端支持的是mysql_native_password 这种加密方式;
解决方案:
1,用如下语句查看mysql当前加密方式
select host,user,plugin from user;
查询结果
+-----------+------------------+-----------------------+
| host | user | plugin |
+-----------+------------------+-----------------------+
| % | root | caching_sha2_password |
| localhost | mysql.infoschema | mysql_native_password |
| localhost | mysql.session | mysql_native_password |
| localhost | mysql.sys | mysql_native_password |
+-----------+------------------+-----------------------+
看host为’%'的那一行,root加密方式为caching_sha2_password。
2,使用命令将他修改成mysql_native_password加密模式:
update user set plugin='mysql_native_password' where user='root';
再次连接的时候,就成功了。
四、如果还连接不上
通过以上操作后,依然无法连接上,问题可能出在了防火墙上。
1,mysql部署在实体服务器上解决方案如下:
a.开放mysql的端口号,默认端口号是3306。b.直接关闭防火墙(慎重操作,不建议。当然测试玩的话就随意了。。。。)
2,mysql部署在云计算机上的方案如下:a.以阿里云为例,找到实例,设置安全组,开放端口号即可。
附:mysql 允许其他ip访问
1.改表法
可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,从"localhost"改称"%"
//执行以下sql语句 use mysql; update user set host = '%' where user = 'root'; select host, user from user; flush privileges;
测试连接成功
总结
到此这篇关于navicat工具中设置mysql允许外部访问的文章就介绍到这了,更多相关mysql允许外部访问内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论