Mysql 三级等保安全加固 —— 筑梦之路

安全加固的前提是保障业务稳定运行,而不是为了安全加固而加固!!!!

1. 新增审计账号并赋予相关权限

进入数据库操作后台:
mysql -h 192.168.101.17-u root -p

查看数据库用户和口令信息:
select host,user,plugin,authentication_string from mysql.user;

查看用户权限:
show grants for  audit@localhost;

创建新用户:
create user 'manager'@'localhost' identified by 'abc@123';

给用户授权:
grant privileges ON databaseName.tableName TO 'manager'@'localhost';

grant select, insert, update, delete on databaseName.tableName TO 'manager'@'localhost';

撤销用户权限:
REVOKE privilege ON databaseName.tableName TO 'manager'@'localhost';

查看当前用户权限:
show grants; / SHOW grants for 'manager'@'localhost';

*刷新后设置生效:
flush privileges

2. 重置数据库简单密码

进入数据库后台:

alter user 'manager'@'localhost' identified by '!QAZ2wsx';

3. 检查密码复杂度

查看密码复杂度:
show variables like 'validate%';

上述命令执行结果为空时输入:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

4. 安全策略设置


## 数据库连接设置:
安装插件:
install plugin CONNECTION_CONTROL soname 'connection_control.so';

安装插件:
install plugin CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS soname 'connection_control.so';

查看:
show variables like '%connection_control%';

## 修改my.cnf文件
connection-control-failed-connections-threshold=5   #登陆失败次数限制
connection-control-min-connection-delay=300000    #限制重试时间,此处为毫秒,注意按需求换算,此处为5分钟
## 重启mysql服务才能生效
service mysqld start

5. 密码过期天数设置

查看密码过期天数:
SHOW VARIABLES LIKE "%password%"; # 默认default_password_lifetime=0

修改/etc/my.cnf文件:
default_password_lifetime=180

## 重启mysql服务才能生效
service mysqld start

6. 检查策略

查看登录失败策略:
show variables like '%max_connect_errors%';

操作超时自动退出:
show variables like "%timeout%";

询问是否采用远程管理,如果本地管理则不适用,远程管理是否启用SSL:
show variables like "%have_ssl%";
show variables like "%have_openssl%";

7. 及时删除或停用多余的、过期的账户,避免共享账户的存在

数据库后台输入:
select user,host,authentication_string,password_lifetime,account_locked from mysql.user;

取消所有授权:
REVOKE ALL PRIVILEGES ON *.* FROM 'audit'@'localhost';

删除用户:
DROP USER 'manager'@'localhost';

8. 检查权限

检查用户权限列表:
select * from mysql.user\G:

检查数据库权限列表:
select * from mysql.db\G;

检查用户表权限列表:
select * from mysql.tables_priv\G;

9. 启用安全审计

执行下列语句,默认为OFF,不符合。应设置为ON为开启审计。

后台执行:show global variables like '%general%';

打开审计:set global general_log=on;

10. 检查版本是否存在漏洞

linux命令行:mysql -V

后台:show variables where variable_name like "version";

11. 数据完整性

   应采用校验技术或密码技术保证重要数据在传输过程中的完整性,包括但不限于鉴别数据、重要业务数据、重要审计数据、重要配置数据、重要视频数据和重要个人信息等。

是否启用了SSL进行了数据通信,确认是否还有其他保证数据传输过程中的完整性措施;本地管理不适用,远程管理是否开启SSL。

   对数据库配置文件进行一个完整性检测,需要配置文件初始可信状态时的哈希值,然后再根据目前的文件生成一个哈希值,对比前后的一致性,确认数据是否被篡改过,根据了解一般数据库自身不带这种机制,询问管理人员是否使用了第三方软件。对数据库重要数据进行了完整性校验。

12. 数据保密性

   应采用密码技术保证重要数据在传输过程中的保密性,包括但不限于鉴别数据、重要业务数据和重要个人信息等。

   SCRAM-SHA-256属于挑战-响应架构,可防止密码在不可信连接上嗅探,并支持以密码散列的形式将密码存储在服务器上,这种形式被认为是安全的。

   MD5使用自定义安全性较低的质询-响应机制。它可以防止密码嗅探,并避免以纯文本形式将密码存储在服务器上,但如果攻击者设法从服务器窃取密码哈希,则不提供保护。(MD5哈希算法现在不再被认为是安全的算法)若password是以明文密码传送给数据库,建议不在生产环境中使用。若数据库未开启SSL时,通过Wireshare对数据库认证过程的数据包进行抓取,可能发现传输的密码字段信息。

   MySQL提供的数据加密方案中包括AES加解密方案AES_ENCRYPT AES_DECRYPT,DES加解密方案DES_ENCRYPT。

13. 数据备份恢复

应提供重要数据的本地数据备份与恢复功能

  • 询问数据备份策略(每天/周,全备/增备)
  • 是否具备恢复测试记录

应提供异地实时备份功能,利用通信网络将重要数据实时备份至备份场地

  • 是否进行异地备份,记录异地备份机房(距离在60公里以上)。
  • 询问备份策略(每天/周,全备/增备)备份询问管理员

应提供重要数据处理系统的热冗余,保证系统的高可用性

  • 如果是云上数据库,是否为高可用版本
  • 如果线下数据库,看是否部署两台以上服务器。
  • 集群部署、双机热备均可判定为符合。

14. 剩余信息保护

  • ## 应保证鉴别信息所在的存储空间被释放或重新分配前得到完全清除
  • 数据库系统内核层默认无法实现剩余信息保护功能需要第三方工具实现## 应保证存有敏感数据的存储空间被释放或重新分配前得到完全清除。
  • 一般情况下数据库系统内核层默认无法实现剩余信息保护功能,需要第三方工具才能实现

15.个人信息保护

  • ## 应仅采集和保存业务必需的用户个人信息;
  • 检查数据库中是否存储个人信息,若有,检查个人信息保护机制和个人信息保护管理制度。
  • ## 应禁止未授权访问和非法使用用户个人信息。
  • 检查个人信息保护机制和个人信息保护管理制度,验证非授权人员是否可以访问个人信息存储的相关组件内容

你可能感兴趣的:(数据库技术,linux系统运维,mysql,安全,数据库)