MySQL 安全设置

2015-04-30 database mysql

很多时候在部署一种产品时,安全性往往是最后考虑的,不过这也带来了很大的风险。

权限控制

通常数据库只需要本地网络访问,所以完全没有必要将权限开放给网络。

mysql> GRANT ALL ON *.* TO 'user'@'%';               ← 可能会存在风险
mysql> GRANT ALL ON *.* TO 'user'@'192.168.9.128';   ← 需要指定IP

一定要设置 root 密码,通常可以设置成只能本地访问;最好可以将 root 修改为其它名称。

mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new-passowrd');
mysql> UPDATE mysql.user SET user='foobar' WHERE user='root';
mysql> FLUSH PRIVILEGES;

对于系统文件,其中数据文件最好使用 mysql:mysql 用户,其中需要确保只有 mysql 和 root 可以访问;对于二进制文件,同样需要设置。

禁用 LOCAL INFILE

用于防止非授权用户访问本地文件,可以通过如下方式查看。

mysql> LOAD DATA LOCAL INFILE '/etc/passwd' INTO TABLE tbl;
mysql> SELECT load_file('/etc/passwd');

此时,需要在配置文件中添加如下内容。

[mysqld]
set-variable=local-infile=0