前段时间,我班有两个人的MySQL数据库被攻破,所有数据被清空。他们的MySQL实例有两个共同点:
- 暴露3306端口。
- 使用root用户登录且为弱密码。
MySQL的root用户权限过大,使用root登录是较危险的。因此我们应当避免在生产环境使用root登录,而是新建一个权限较小的用户,以确保安全。
配置端口
MySQL默认配置为只监听本地回环上的3306端口,如果需要将3306端口暴露给外网,需要首先修改MySQL配置。
编辑MySQL的my.cnf
配置文件,在ubuntu上,其默认位置为/etc/mysql/my.cnf
找到bind-address = 127.0.0.1
,修改为bind-address = 0.0.0.0
。
修改完成后,重启MySQL。仅仅配置端口并不能使MySQL可以被远程访问,还需要配置用户权限,见下。
创建用户并设置权限
MySQL的root用户权限过于强大,我们不应当在生产环境中,尤其是暴露了3306端口的生产环境中使用root用户登录。
创建新用户
使用ROOT用户登录,并输入下列语句新建一个用户。
CREATE USER username IDENTIFIED BY 'password';
此时用户username已经建好,不过还没有任何权限,也就无法进行任何操作。
设置权限
键入
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost' IDENTIFIED BY 'password';
其中每个字段的意思为
GRANT [权限] ON [数据库].[表] TO '[用户名]'@'[来源IP]' IDENTIFIED BY '[密码]';
其中,权限字段为想要赋予该用户的权限。如果授予全部权限,则为ALL PRIVILEGES
,也可以单独授权某些命令,如SELECT, UPDATE
。
来源IP为允许该用户登录的IP,例如localhost
为只允许该用户从本地登录。如果不想限制该用户的登录IP,则此字段设为%
。
权限设置完成后,刷新权限使其生效
FLUSH PRIVILEGES;
发表回复/Leave a Reply