数据库允许远程连接是不安全的。为什么要开放远程连接?因为为了方便协同开发,开发时小组成员连接同一个数据库,方便开发与测试,环境统一。
线上一般不允许远程连接数据库。如果应用服务器和数据库服务器所在主机不同,必须要远程连接数据库,那也要在数据库服务器上设置IP白名单,只允许指定的IP进行连接。
实验环境
Ubuntu 16.04.1
MySQL 5.7.19
开放服务器指定端口
修改防火墙规则,开放指定端口(MySQL的默认服务端口是3306)
腾讯云服务器的防火墙规则是在安全组
里设置
授权非本机连接、登录
修改数据库配置文件
修改 /etc/mysql/mysql.conf.d/mysqld.cnf
文件,把bind-address = 127.0.0.1注释掉,此种类型的文件以#
注释
修改mysql.user表
mysql这个库是MySQL数据库内置的库(系统库),它里面的user表,存储的是可以登录数据库的用户信息,包括用户名、密码(加密存储的)、有哪些权限等。这个user表只有root权限才可以访问。
进入MySQL,-p
后面跟的参数是你的root账号的密码
|
|
修改可以对 myusername
这个账号进行连接的主机
切换到mysql数据库
|
|
修改修改mysql
库中user
表
|
|
其中%
代表任意主机或IP地址。 如果不允许root
账户远程连接,可以新建其他用户后,对新建的用户授权,就是修改mysql
库中user
表指定user
列的host
为%
(所有IP)或者改为指定IP
(IP白名单)
查看上一步的更改
|
|
上述操作正确,会有类似下面的结果:
授权
|
|
给用户名为myusername,密码为mypassword的用户所有权限,他可以操作此数据库服务器上的任意库中的任意表,而且还可以给其他用户赋予权限。
分析如下:
GRANT ALL PRIVILEGES
和TO 'myusername'@'%' IDENTIFIED BY 'mypassword'
表示给用户名为myusername,密码为mypassword的用户所有权限ON *.*
被授权用户可以操作此数据库服务器上的任意库中的任意表WITH GRANT OPTION;
可以给其他用户赋予权限
更加细粒度的授权,请参照官方文档吧 ^_^
使修改生效
|
|
退出MySQL服务器
|
|
- 重启MySQL
|
|
注意
MySQL关键字不区分大小写