Mysql远程访问权限

在阅读本文时,推荐先走读完浅谈Mysql权限控制一文。

Mysql启动默认的端口3306是打开的,此时打开了mysqld的网络监听,允许用户远程通过账号密码连接本地数据库,Mysql数据库默认是允许远程用户连接服务器的。

那么,为什么你似乎没有修改默认配置,而且本地也还能连接,可是就远程连接不了呢?其实,这是你的账户问题,在Mysql,一个用户不是由账户名区别开的,而是由’user'@'host'区别开的,什么意思呢?

浅谈Mysql权限控制中我们说过,Mysql服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库中,其中最为重要的是mysql.user表,user表中记录允许连接到服务器的账号信息,通过对user中的字段观察可以发现,user表中使用host+user的联合主键,简单的理解就是说'user'@'localhost'和'user'@'%'是两个不同的账号,user表中的host、user、password(5.7中为authentication_string)分别表示主机名、用户名和密码。当用户与服务器之间建立连接时,输入的账户信息中的用户名称、主机名和密码必须匹配user表中对应的字段,只有三个值都匹配的时候,才允许连接的建立。这3个字段的值就是创建账户时保存的账户信息。

其实上,在修改用户密码时,实际就是修改usesr表的password(5.7中为authentication_string)字段的值。

而在我们常说的允许远程访问,实际上就是修改user表中user和host的关系,下面我们看下常用的两种方法:

1.直接修改user表

我们首先查看数据库mysql.user信息:

尝试远程登录:

修改user表信息:

update user set host='%' where user='root' and host='localhost';

说明:%表示允许所有的主机连接,也可以直接指定ip。

由于这里是直接修改权限表信息,还需要刷新权限信息使用权限更新到缓存

flush privileges;

远程登录:

登录成功!可以看出,这种方式实现是上在修改user表中root的连接主机信息,我们再来看第二种方式。

2.grant语句允许远程连接

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'youpassword' WITH GRANT OPTION;

较于熟悉Mysql的读者可以看出,上述语句实际上是新建一个用户名称为root,连接主机为允许所有主机(这时也可以指定主机,即将%替换为指定主机来限制访问),密码为youpassword的用户,我们来运行查看结果,为了避免出错,我们将原root的连接主机还原为localhost再进行演示。

使用grant语句:

注意,这里是不需要flush privilege;来刷新权限信息的,因为grant语句会自动刷新到缓存,我看到很多文章都说要刷新权限,那是因为对Mysql权限操作不了解。而在这里我们也能看到,该grant语句已经建立一个新的用户,我们再次进行远程连接时,实际上是使用上图中最后一个用户在登录,上图中第一个root用户密码为root,最后一个root用户密码为youpassword,我们只要远程登录测试便知登录用户,为了演示明显,这里使用密码显式登录,正常情况下请使用密码隐式登录:

可以看出,该方法事实上是新建一个允许所有主机远程连接的新用户。

对于使用grant语句创建新用户的语法,请阅读Mysql账户创建及删除一文。

后记:在文章的最开头,我们从数据库层面说了Mysql默认是允许用户远程访问的,在基于安全的考虑下,我们有时不希望用户远程访问,怎么办呢?我们只需要将my.cnf文件中的skip-networking注释去除就行。

好了,今天的分享就到这里了,由于是个人整理总结,难免会出错,欢迎大家批评指正,万般感谢


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值