【史上最全】MySQL数据库安全加固方案_mysql安全加固(2)

connection-control-max-connection-delay=86400000

1.3 口令

A. 检查账户默认密码和弱密码。
B. 口令长度需要至少 14 位,并需要包括数字、英文字母和特殊符号。执行以下命令可对密码类型进行限制。

mysql> INSTALL PLUGIN validate_password SONAME 'validate_password.so';
mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password_check_user_name | ON |
| validate_password_dictionary_file | | #规则文件保存路径
| validate_password_length | 8 | #密码长度
| validate_password_mixed_case_count | 1 | #整个密码中至少要包含大/小写字母的总个数;
| validate_password_number_count | 1 | #整个密码中至少要包含阿拉伯数字的个数;
| validate_password_policy | MEDIUM | #密码的验证强度等级
| validate_password_special_char_count | 1 | #密码中特殊字符至少的个数
+--------------------------------------+--------+
7 rows in set (0.00 sec

C. 密码应至少每 90 天进行一次更换。

  1. 在 mysqld.cnf 文件中添加配置 default_password_lifetime=90,并重启 mysql。
  2. 使用命令 alter user ‘账号名’@‘host 地址’ password expire interval 90 day 将账号设置为 90 天更换一次。
    D. 您可以通过执行以下命令修改密码。必须要修改 mysql 安装后给的 root 超级管理员的随机密码。
mysql> update user set password=password('密码') where user='root';
mysql> flush privilege

E. 在 mysqld.cnf 文件中添加配置 validate_password_policy=STRONG 将密码强度更改为强
F. 在 mysqld.cnf 文件中添加配置 validate_password_length=14,设置密码长度最小为 14。
G. 禁止数据库用户密码为空。输入命令 SELECT User,host FROM mysql.user WHERE LENGTH(authentication_string) = 0 检查是否有密码为空的用户。
H. 禁止在 mysqld.cnf 中配置密码。执行命令 cat mysqld.cnf 2>/dev/null | grep -i ‘[a-zA-Z0-9#]*password’,若返回结果不为空,则在 mysqld.cnf 配置文件中清除[client]中的 password 信息.

1.4 授权

在数据库权限配置能力范围内,根据用户的业务需要,配置其所需的最小权限。
A. 查看数据库授权情况。

mysql> use mysql;
mysql> select * from user;
mysql>select * from db;
mysql>select * from host;
mysql>select * from tables_priv;
mysql>select * from columns_priv;

B. 通过 revoke 命令回收不必要的或危险的

mysql> help revoke
Name: 'REVOKE' 
Description:
Syntax:
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ... ON [object_type]
{
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
}
FROM user [, user] ...

1.5 开启日志审计功能

数据库应配置日志功能,便于记录运行状况和操作行为。
MySQL 服务有以下几种日志类型: 错误日志: -log-err
查询日志: -log (可选)
慢查询日志: -log-slow-queries (可选)
更新日志: -log-slave-updates
二进制日志: -log-bin
A. 添加错误日志。在 mysqld.cnf 文件中如果没有 log-error,则添加
log-error=/var/log/mysqld.log。
B. 添加二进制日志和更新日志。在 mysqld.cnf 文件中添加以下内容。

log-bin=/var/lib/mysql/文件名
server-id=字符串 #随机指定一个不能和其他集群中机器重名的字符串
log-slave-updates=11

C. 使用命令 set global slow_query_log=ON 添加慢查询日志。使用 set global long_query_time=5;
设置慢查询时间。
D. 修改配置后,要重启 mysql。
日志查询操作说明
执行 show variables like ‘log_%’;命令可查看所有的 log。
执行 show variables like ‘log_bin’;命令可查看具体的 log。

1.6 安装最新补丁

确保系统安装了最新的安全补丁。
注意: 在保证业务及网络安全的前提下,并经过兼容性测试后,安装更新补丁。

1.7 设置可信 IP 访问控制

通过数据库所在操作系统的防火墙限制,实现只有信任的 IP 才能通过监听器访问数据库。

mysql> GRANT 权限 ON db.* TO 用户名@'IP 子

1.8 连接数设置

根据您的机器性能和业务需求,设置最大、最小连接数。
在 MySQL 配置文件(mysqld.cnf)的 [mysqld] 配置段中添加 max_connections = 3000,保存配置文件,重启 MySQL 服务后即可生效。

1.9 设置证书撤销列表

在 mysqld.cnf 文件添加 ssl_crl=file_name。

1.10 删除不使用的客户端程序

删除不使用的客户端程序、头文件、测试文件和 debug 文件。
步骤 1 以默认安装路径说明,执行如下命令删除/usr/bin 路径下除了 mysql、mysqlbinlog 和
mysqldump 外的其它 mysql 客户端程序:
rm -rf /usr/bin/mysqladmin
rm -rf /usr/bin/mysqlcheck
rm -rf /usr/bin/mysql_config
rm -rf /usr/bin/mysql_config-64
rm -rf /usr/bin/mysql_config_editor
rm -rf /usr/bin/mysqld_pre_systemd
rm -rf /usr/bin/mysqldumpslow
rm -rf /usr/bin/mysqlimport
rm -rf /usr/bin/mysql_install_db
rm -rf /usr/bin/mysql_plugin
rm -rf /usr/bin/mysqlpump
rm -rf /usr/bin/mysql_secure_installation
rm -rf /usr/bin/mysqlshow
rm -rf /usr/bin/mysqlslap
rm -rf /usr/bin/mysql_ssl_rsa_setup
rm -rf /usr/bin/mysql_tzinfo_to_sql
rm -rf /usr/bin/mysql_upgrade
步骤 2 执行如下命令删除/usr/share/man/man1/目录下除了/usr/share/man/man1/mysql.1.gz 外的其它 mysql 相关帮助文档:
ls /usr/share/man/man1/mysql |grep -w -v mysql.1 |xargs rm
步骤 3 执行如下命令检查客户端程序是否已删除:
ls -al /usr/bin/mysqladmin
ls -al /usr/bin/mysqlcheck
ls -al /usr/bin/mysql_config
ls -al /usr/bin/mysql_config-64
ls -al /usr/bin/mysql_config_editor
ls -al /usr/bin/mysqld_pre_systemd
ls -al /usr/bin/mysqldumpslow
ls -al /usr/bin/mysqlimport
ls -al /usr/bin/mysql_install_db
ls -al /usr/bin/mysql_plugin
ls -al /usr/bin/mysqlpump
ls -al /usr/bin/mysql_secure_installation
ls -al /usr/bin/mysqlshow
ls -al /usr/bin/mysqlslap
ls -al /usr/bin/mysql_ssl_rsa_setup
ls -al /usr/bin/mysql_tzinfo_to_sql
ls -al /usr/bin/mysql_upgrade
步骤 4 执行如下命令检查相关帮助文档是否已删除:
ls /usr/share/man/man1/mysql |grep -w -v mysql.1 |wc –l

1.11 禁止设置 SKIP-SECURE-AUTH

skip-secure-auth 会关闭 secure_auth,将允许使用 mysql_old_password 插件存储密码的用户连接数据库,因此禁止设置 skip-secure-auth。
步骤 1 执行如下 SQL 语句检查是否设置 skip-secure-auth:
show variables like ‘secure_auth’;
步骤 2 若返回结果不为 ON,则在 mysqld.cnf 配置文件中删除[mysqld] skip-secure-auth。
步骤 3 重启数据库

1.12LOCAL_INFILE 配置为 0

步骤 1 执行如下 SQL 语句:
show variables like ‘local_infile’;
步骤 2 若返回结果不为 OFF,则在 mysqld.cnf 配置文件中修改[mysqld] local_infile=0。
步骤 3 重启数据库。

1.13 设置 MASTER_INFO_REPOSITORY、RELAY-LOG-INFO-REPOSITORY

Master_info_repository 用于指定 master 状态信息和连接信息记录位置,会保存明文密码。
步骤 1 分别执行如下 SQL 语句:
show global variables like ‘master_info_repository’;
show global variables like ‘relay_log_info_repository’;
步骤 2 若返回值不为 TABLE,则在/etc/mysqld.cnf 配置文件中修改[mysqld]
master_info_repository=TABLE 和 relay-log-info-repository=TABLE。
步骤 3 重启数据库。

1.14 禁止使用 MYSQL_PWD 环境变量

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

dlCugO-1715566426031)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 28
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MySQL 数据库安全加固是非常重要的,以下是一些常用的方法和建议: 1. 更新和维护 MySQL:定期更新 MySQL 数据库版本和补丁,确保使用的是最新的安全版本。 2. 设置强密码策略:确保 MySQL 用户密码强度要求高,包括长度、复杂性和定期更改密码。 3. 限制网络访问:仅允许受信任的主机或 IP 地址访问 MySQL 数据库,可以使用防火墙规则或 MySQL 的访问控制列表 (ACL) 来限制访问。 4. 禁用不必要的服务和功能:禁用或移除不需要使用的 MySQL 服务和功能,例如远程管理工具或插件。 5. 使用加密连接:通过启用 SSL/TLS 加密来保护 MySQL 数据库的通信,这样可以防止数据在传输过程中被窃听或篡改。 6. 定期备份数据:定期备份数据库,确保数据可以恢复到最近的可用状态,以防止数据丢失或损坏。 7. 限制权限和访问控制:使用最小权限原则,按需分配 MySQL 用户的权限,并定期审查和更新权限设置。 8. 监控和日志记录:启用 MySQL 的日志记录功能,并定期检查日志文件以监控异常活动和安全事件。 9. 安全审计和漏洞扫描:定期进行安全审计和漏洞扫描,及时发现和修复数据库中的安全漏洞。 10. 加强物理安全措施:确保 MySQL 数据库服务器受到适当的物理保护,例如放置在安全的机房或锁定的机柜中。 请注意,这些仅是一些基本的安全加固措施,具体的加固步骤可能因环境和需求而有所不同。建议在实施之前,先了解并评估您的具体需求和风险,并参考 MySQL 官方文档和安全最佳实践进行操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值