Msyql的my.cnf配置文件参数详解及安全优化

一、参数详解

1.禁用local_infile选项会降低攻击者通过SQL注入漏洞器读取敏感文件的能力
local-infile=0

2.5.6以上版本应禁用符号链接以防止各种安全风险
skip_symbolic_links=yes

3.使用此选项,会导致所有客户端都对所有数据库具有不受限制的访问权限。
skip-grant-tables 【禁用】

4.当log-raw记录启用时,有权访问日志文件的人可能会看到纯文本密码。
log-raw=off

5.MYSQL_PWD环境变量的使用意味着MYSQL凭证的明文存储,极大增加MySQL凭据泄露风险。
MYSQL_PWD

6.启动错误日志
log-error=<log_path>

二、安全优化

1.使用非默认端口,降低被初级扫描危险
port = 3307

2.使用非root用户启动mysql
user = mysql

3.匿名登录检查
delete from user where user='';
flush privileges;

4.避免在主机名中只使用通配符,有助于限定可以连接数据库的客户端,否则服务就开放到了公网
执行SQL更新语句,为每个用户指定允许连接的host范围。 
   1. 登录数据库,执行use mysql; ;   
   2. 执行语句select user,Host from user where Host='%';查看HOST为通配符的用户; 
   3. 删除用户或者修改用户host字段,删除语句:DROP USER 'user_name'@'%'; 。更新语句:update user set host = <new_host> where host = '%';。 
   4. 执行SQL语句:
      OPTIMIZE TABLE user;
      flush privileges;

5.启动错误日志,快速定位问题
log-error=<log_path>

6.mysql5.7执行sql报错,1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'csc_risk.a.DefaultDate' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by, Time: 0.035000s 
查看sql_mode:
 SELECT @@sql_mode;
 ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
解决:
 配置文件:
 sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION  
 临时修改:
 全局修改,适用于新建数据库
 SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
 适用于已有数据库
 SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

posted @ 2020-11-12 11:05  A学无止境A  阅读(257)  评论(0编辑  收藏  举报