Mysql 加固

官方文档:

https://dev.mysql.com/doc/

windows的mysql加固 mysql数据库加固_服务器


配置 文件 /etc/my.cnf

一. 修改默认端口

如非必要,可以修改默认端口避免针对扫描

[mysqld]
port=3300
二. 禁止使用 skip-grant-tables & log-raw & symbolic-links & local-infile
  • skip-grant-tables
    作用是跳过授权表,读取所有库数据
    配置文件中默认不会开启,如果有,请删除此选项,默认不开启
  • log-raw 访问日志
    可能会记录数据库明文密码,建议删除它,默认不开启
  • symbolic-links
    禁用符号链接以防止各种安全风险
    symbolic-links=0,5.6及以上版本应该配置为skip_symbolic_links=yes
  • local-infile
    禁用local-infile选项避免sql注入读取文件
    local-infile=0
  • secure_file_priv =
    MYSQL新特性secure_file_priv对读写文件的影响,尽量不要使用
三. 开启日志,便于审计

mysql 默认日志路径为:var/log/mysqld.log

  • 错误日志: -log-err
  • 查询日志: -log (可选)
  • 慢查询日志: -log-slow-queries (可选)
  • 更新日志: -log-update
  • 二进制日志: -log-bin
show variables like 'log_%';	##查询所有log

开启慢查询日志:

[mysqld]
slow_query_log
long_query_time=2
slow_query_log_file=/var/log/mysql/query.log
.........

开启二进制日志:

[mysqld]
server-id=1
log-bin=binlog
log-bin-index=binlog.index
.............

windows的mysql加固 mysql数据库加固_数据库_02

四. 配置密码策略及强密码

官方文档:
https://dev.mysql.com/doc/refman/8.0/en/validate-password-options-variables.html

mysql 密码策略相关参数
  1. validate_password_length 固定密码的总长度;
  2. validate_password_dictionary_file 指定密码验证的文件路径;
  3. validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
  4. validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
  5. validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;关于 validate_password_policy 的取值:0/LOW:只验证长度;1/MEDIUM:验证长度、数字、大小写、特殊字符;2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
  6. validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;

mysql 8.X版本:#查看密码策略

show variables like '%validate_password.policy%';
show variables like '%validate_password.length%';
show variables like 'validate_password%';
#修改密码策略
set global validate_password.policy=1;  #设置为强口令
set global validate_password.length=12;  #密码最小长度为12

mysql 57版本:#查看密码策略

show variables like '%validate_password_policy%';
show variables like '%validate_password_length%';
#修改密码策略
set global validate_password_policy=1;
set global validate_password_length=12;

windows的mysql加固 mysql数据库加固_运维_03

五. 匿名账户问题

直接在终端输入mysql 即可进入mysql 的 属于一个匿名账户,将它删除。

use mysql;
select host,user from user where user="";
delete from user where user='';
六. 良好的数据库权限分配习惯

对应相应服务,相对需求,赋予相应权限

grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址;
ALTER 修改表和索引
CREATE 创建数据库和表
DELETE 删除表中已有的记录 
DROP 抛弃(删除)数据库和表 
INDEX 创建或抛弃索引
INSERT 向表中插入新行 
REFERENCE 未用 
SELECT 检索表中的记录 
UPDATE 修改现存表记录
FILE 读或写服务器上的文件 
PROCESS 查看服务器中执行的线程信息或杀死线程 
RELOAD 重载授权表或清空日志、主机缓存或表缓存
SHUTDOWN 关闭服务器 ALL 所有
ALL PRIVILEGES同义词 USAGE 特殊的“无权限”权限

windows的mysql加固 mysql数据库加固_windows的mysql加固_04

windows的mysql加固 mysql数据库加固_mysql_05

七. 非必要不要开启远程登录权限
update user set host='localhost' where host='%';

windows的mysql加固 mysql数据库加固_windows的mysql加固_06

八. 修改管理员账户名
update user set User='admin' where User='root';
flush privileges;
九.禁止mysql对本地文件进行读取,限制一般用户访问浏览其他用户数据库
set-variable=local-infile=0

skip-show-database
十. 配置可信IP访问控制
grant all privileges on db.*
 ·-> -> TO 用户名@'IP子网/掩码';
十一. 删除根目录下mysql历史记录文件
$ rm ~/.mysql_history
$ ln -s /dev/null ~/.mysql_history

待续

待续