首页 > 数据库 >等保三级-MySQL 加固

等保三级-MySQL 加固

时间:2024-05-25 14:34:40浏览次数:24  
标签:log show mysql global ssl MySQL 加固 password 三级

1、身份鉴别

要求:建议身份密码登录,身份标识具有唯一性,身份鉴别信息具有复杂度要求,密码长度最少为8位,密码由数字、字母大小写、特殊符号组成、并设置定期更换,更换时间最长位90天
(1)查看所有用户:

select user,host from mysql.user;

在这里插入图片描述
(2)查看密码复杂度插件

select * from mysql.plugin;

在这里插入图片描述
发现mysql8.0 并没有校验插件,然后查看插件包,发现有这个插件,则对该插件进行安装。

install plugin validate_password soname 'validate_password.so';

在这里插入图片描述
(3)卸载默认密码复杂度插件

uninstall plugin auth_socket.so;

在这里插入图片描述
(4)密码复杂度插件配置

show variables like 'validate%';

在这里插入图片描述
validate_password_check_user_name,ON为打开
validate_password_dictionary_file用于配置密码的字典文件,当validate_password_policy设置为STRONG时可以配置密码字典文件,字典文件中存在的密码不得使用
validate_password_length用来设置密码的最小长度,默认值是8最小是0
validate_password_mixed_case_count当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少同时拥有的小写和大写字母的数量,默认是1最小是0;默认是至少拥有一个小写和一个大写字母。
validate_password_number_count当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少拥有的数字的个数,默认1最小是0
validate_password_special_char_count当validate_password_policy设置为MEDIUM或者STRONG时,密码中至少拥有的特殊字符的个数,默认1最小是0

(5)密码有效期配置

show global variables like 'default_password_lifetime';
修改命令
set global default_password_lifetime = 90;

在这里插入图片描述
查看修改结果
在这里插入图片描述
当password_lifetime 为null时,则代表该用户当前口令的有效期是使用的全局变量,而default_password_lifetime 为0代表有效期永远。

(6)查看密码有效期状态

select user,host,password_lifetime,password_last_changed from mysql.user;

在这里插入图片描述

2、测评内容

(1)查看失败锁定策略

show variables like "%connection_control%";

在这里插入图片描述
空表表示未安装插件,插件安装语句

install plugin connection_control soname "connection_control.so";
install plugin connection_control_failed_login_attempts soname 'connection_control.so';

查看插件状态

select plugin_name,plugin_status from INFORMATION_SCHEMA.PLUGINS where PLUGIN_NAME LIKE 'connection%';

在这里插入图片描述
对策略进行查询

show variables like "%connection_control%";

在这里插入图片描述
加固修改命令

set global connection_control_failed_connections_threshold = 5;
set global connection_control_max_connection_delay = 1800000;
set global connection_control_min_connection_delay = 1800000;

connection_control_failed_connections_threshold:在服务器增加后续连接尝试的延迟之前,允许客户端进行的连续失败连接尝试的次数。
connection_control_min_connection_delay:对于超出阈值的每个连续连接失败,要添加的延迟量。
connection_control_max_connection_delay:要添加的最大延迟。

(2)查看连接超时退出策略

show global variables like '%timeout'; 

在这里插入图片描述
这三个参数
wait_timeout
interactive_timeout
connect_timeout
加固修改命令如下

set global wait_timeout=1800;
set global interactive_timeout=1800;
set global connect_timeout=10;

在这里插入图片描述

3、远程管理测评内容

要求:建议远程管理数据库时建议使用堡垒机+ssh防止鉴别信息在网络传输过程中被窃听
(1)查询ssl是否开启 yes是开启了ssl,disable则表示没有

show variables like "%ssl%";

在这里插入图片描述

(2)开启ssl加密传输

set global have_openssl=yes;
set global have_ssl=yes;

(3)查询是否使用ssl

status

在这里插入图片描述
(4)生成ssl证书

退出数据库,我用的是Linux,所以到Linux命令行界面进行操作
查版本

mysql_ssl_rsa_setup
或
mysqld_ssl_rsa_setup

数据库安装位置

find ./ -name "mysql_ssl_rsa_setup"
find ./ -name "mysqld_ssl_rsa_setup"

在这里插入图片描述
数据库是默认有证书文件,所以执行时没有返回值
在这里插入图片描述
找证书位置

find ./ -name "*.pem"

在这里插入图片描述
在这里插入图片描述
(5)配置ssl证书
修改mysql配置文件,找到my.cnf

[mysqld]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/server-cert.pem
ssl-key=/var/lib/mysql/server-key.pem

[mysql]
ssl-ca=/var/lib/mysql/ca.pem
ssl-cert=/var/lib/mysql/client-cert.pem
ssl-key=/var/lib/mysql/client-key.pem

在这里插入图片描述
重启数据库,然后再登录数据库查看

4、用户测评内容

(1)创建两个测试用户
一个测试用户为密码登录,一个为密码+ssl证书登录

create user 'test'@'%' identified by 'Test@123456';
create user 'testssl'@'%' identified by 'Test@123456' require ssl;

在这里插入图片描述
(2)分别用两个测试用户进行登录
在这里插入图片描述
服务器登录ssl账户进行测试是可以输密码直接进入的,所以我们用远程工具进行连接
在这里插入图片描述
客户端加入秘钥
在这里插入图片描述

5、访问控制测评

应对登录的用户分配账户和权限;
应重命名或删除默认账户,修改默认账户的默认口令
应及时删除或停用多余的、过期的账户,避免共享账户的存在;
应授予管理用户所需的最小权限,实现管理用户的权限分离;
要求:建议建立、操作员、审计员、安全管理员等角色,安全管理为制定安全策略人员、操作员为日常操作用户、审计员只需具有审计日志查看权限;实现用户所需权限最小化,和管理用户权限分离。
(1)创建3个角色
操作员:负责业务层面开发,对应我们开发人员。
审计员:只需对日志具有审查权限
管理员:拥有所有的权限,制定安全策略。

create role 'System','Security','guanliyuan';

(2)分配权限

grant all privileges on *.* to 'System'@'%' with grant option;
grant reload,process,Alter,Create User,Create View,select,show databases,show view,update,file on *.* to 'Security'
@'%';
grant reload,process,insert,select,show,create view,alter,insert,show database,show view, on *.* to 'guanliyuan'@'%';

(3)创建管理员用户

create user 'System'@'%' identified by 'System@123345';
create user 'Security'@'%' identified by 'Security@123345';
create user 'guanliyuan'@'%' identified by 'guanliyuan@123345';

(4)用户加入到角色中

grant 'System' to 'System'@'%';
grant 'Security' to 'Security'@'%';
grant 'guanliyuan' to 'guanliyuan'@'%';

激活各个角色

set global activate_all_roles_on_login=on;

6、安全审计

应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计
要求:建议数据库开启安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计;
(1)查看审计开启情况

show global variables like 'log_timestamps';
show global variables like '%general%';
show global variables like '%log_bin%';
show global variables like '%log_error%';
show global variables like '%slow_query_log%';

在这里插入图片描述
log_timestamps表示记录审计日志的时间是从哪里获取。UTC是全球时间,system是系统当前时间,一般我们用当前时间
general_log表示审计功能是否开启
general_log_file表示审计信息的日志文件
log_bin表示二进制日志
log_bin_basename二进制日志的日志文件
log_error表示错误日志
slow_query_log表示慢日志
slow_query_log_file表示慢日志的日志文件

(2)开启审计功能

set global log_timestamps = SYSTEM;
set global general_log = ON;
set global general_log_file = /var/lib/mysql/general.log;
set global slow_query_log = ON;
set global slow_query_log_file = /var/lib/mysql/slow_query.log;

(3)查看审计文件

cat /var/lib/mysql/general.log
cat /var/lib/mysql/binlog
cat /var/lib/mysql/error.log
cat /var/lib/mysql/slow_query.log

标签:log,show,mysql,global,ssl,MySQL,加固,password,三级
From: https://blog.csdn.net/qq_41867674/article/details/139089864

相关文章

  • mysql-查询
    连接查询内连接:相当于查询A、B交集部分数据外连接:左外连接:查询左表所有数据,以及两张表交集部分数据右外连接:查询右表所有数据,以及两张表交集部分数据自连接:当前表与自身的连接查询,自连接必须使用表别名子查询内连接内连接查询的是两张表交集部......
  • Springboot计算机毕业设计信息学院网络工程党支部小程序【附源码】开题+论文+mysql+程
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在信息化高速发展的今天,党建工作也需要与时俱进,利用信息技术手段提升工作效率和影响力。信息学院网络工程党支部作为学院党建工作的前沿阵地,面临着如......
  • Python筑基之旅-MySQL数据库(三)
    目录一、数据库操作1、创建1-1、用mysql-connector-python库1-2、用PyMySQL库1-3、用PeeWee库1-4、用SQLAlchemy库2、删除2-1、用mysql-connector-python库2-2、用PyMySQL库2-3、用PeeWee库2-4、用SQLAlchemy库二、数据表操作1、创建1-1、用mysql-connector-pyth......
  • Python筑基之旅-MySQL数据库(四)
    目录一、数据表操作1、新增记录1-1、用mysql-connector-python库1-2、用PyMySQL库1-3、用PeeWee库1-4、用SQLAlchemy库2、删除记录2-1、用mysql-connector-python库2-2、用PyMySQL库2-3、用PeeWee库2-4、用SQLAlchemy库3、修改记录3-1、用mysql-connector-python......
  • MySQL什么时候 锁表?如何防止锁表?
    锁表会带来一系列问题,影响数据库的性能和系统的稳定性。主要是下面的四个问题: 性能问题、死锁问题、可用性问题、一致性问题1. 锁表带来的性能问题锁表会阻止其他事务对该表的并发访问,包括读操作和写操作。锁表会导致严重的性能问题:系统吞吐量下降:多个事务需要依次等待......
  • MySQL入门——增删查改(上)
    新增语法:INSERT[INTO]table_name[(column[,column]...)]VALUES(value_list)[,(value_list)]...value_list:value,[,value]...单行数据+全列插入多行数据+指定列插入查询语法:SELECT[DISTINCT]{*|{column[,column]...}[FROMta......
  • mysql innodb purge threads
    在MySQL中InnoDB属于存储引擎层,并以插件的形式集成在数据库中。从MySQL5.5.8开始,InnoDB成为其默认的存储引擎。InnoDB存储引擎支持事务、其设计目标主要是面向OLTP的应用,主要特点有:支持事务、行锁设计支持高并发、外键支持、自动崩溃恢复、聚簇索引的方式组织表结构等。想系统学习......
  • MySQL InnoDB存储引擎
    一、存储引擎的简介MySQL5.7支持的存储引擎有InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV、BLACKHOLE等。1、InnoDB存储引擎从MySQL5.5版本之后,默认内置存储引擎是InnoDB,主要特点有:(1)灾难恢复性比较好;(2)支持事务。默认的事务隔离级别为可重复读,通过MVCC(并发版本控......
  • Mysql自增id、uuid、雪花算法id的比较
    MySQL自增id:优点:1.简单易用​MySQL自增id由数据库自动生成。2.效率高自增id是按顺序递增的,可以提高插入和查询的效率。3.索引效率高自增id可以作为主键或索引列,提高查询效率。缺点:1.不适用于分布式系统在分布式环境下,多个节点生成的自增id可能会冲突,需要额外的处理机......
  • 在Linux下管理MySQL的大小写敏感性
    当开发与Linux环境下MySQL数据库交互的Java应用程序时,理解MySQL中的大小写敏感性可以避免潜在的错误和问题。本指南深入探讨了MySQL中的大小写敏感设置,比较了5.7和8.0版本,并为Java开发者提供了最佳实践。1理解MySQL中的大小写敏感性默认情况下,MySQL在Windows上是大小写不敏感的......