Mysql数据库安全设置,保护敏感信息不再泄露!

Mysql数据库常用安全加固设置

数据库通常包含企业的核心业务数据和敏感信息。如果没有足够的安全措施,数据库可能会受到攻击者的攻击,导致数据泄露、篡改或破坏,从而给企业造成巨大的经济损失和信誉损害,因此要尽可能减少暴露面,增强安全防护,进行加固。

一、系统防护:

1、如不需要关闭访问外网,通过防火墙等进行网络拦截,只允许内网访问。 2、开启防火墙firewalld

# 启动防火墙服务
systemctl start firewalld

# 开机启动
systemctl enable firewalld

# 查看允许通过的端口
firewall-cmd --zone=public --list-ports

# 刷新防火墙状态
firewall-cmd --reload

3、指定监听端口或者修改数据库默认端口 默认配置文件在/etc/my.cnf,在[mysqld] 部分添加端口配置

[mysqld]
port = 3307

重启mysql-server服务。

systemctl restart mysqld

二、数据库配置防护:

1、使用mysql用户运行mysql,防止程序权限过高

2、数据库用户,拒绝远程登录,删除'用户@%'账号

mysql> SELECT User,Host FROM mysql.user;
+------------------+-----------+
| User             | Host      |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
| zabbix           | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)

mysql> 

3、开启数据库日志审计 在my.cnf配置中添加log-error=/var/log/mysqld.log

4、配置最大连接数 在my.cnf添加设置

max_connections=<new_value>  # 默认151

5、配置密码复杂度

# 安装插件
mysql -uroot -p
install plugin validate_password soname 'validate_password.so';

# 在my.cnf[mysqld]下添加如下配置
plugin-load = "validate_password.so"
validate-password = FORCE_PLUS_PERMANENT		# 强制启用该插件,不能被卸载
validate_password_length = 12 					# 密码位数,默认为8,按需修改
validate_password_policy = MEDIUM               # 密码强度为medium或者1 
validate_password_mixed_case_count = 1 			# 至少有大小写字母
validate_password_number_count = 1 				# 最少一个数字
validate_password_special_char_count = 1 		# 最少一个符号
validate_password_check_user_name = OFF         # 禁止设置密码和用户名一致

6、配置登录失败锁定策略

# 安装插件
mysql -uroot -p
install plugin connection_control soname 'connection_control.so';

# 在my.cnf[mysqld]中添加如下配置
plugin-load-add=connection_control.so
connection_control=FORCE                         # 强制启用
connection_control_min_connection_delay=300000   # 最大延迟登录时间,单位毫秒。
connection_control_failed_connections_threshold=5 # 登录失败次数,默认为3

7、禁用local-infile选项 local-infile选项允许读取本地sql文件,可能增加安全隐患。

mysql -uroot -p
# 查看设置
show variables like 'local_infile';
# 若返回结果不为OFF,则在/etc/my.cnf配置文件中修改
local_infile = 0

8、禁止符号链接

# 在my.cnf中添加
skip_symbolic_links=yes

my.cnf配置示例:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# 数据库日志
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

# 最大连接数设置
max_connections= 100

plugin-load = "validate_password.so"
validate-password = FORCE_PLUS_PERMANENT        # 强制启用该插件,不能被卸载
validate_password_length = 12                   # 密码位数,默认为8,按需修改
validate_password_policy = MEDIUM               # 密码强度为medium或者1 
validate_password_mixed_case_count = 1          # 至少有大小写字母
validate_password_number_count = 1              # 最少一个数字
validate_password_special_char_count = 1        # 最少一个符号
validate_password_check_user_name = OFF         # 禁止设置密码和用户名一致


plugin-load-add=connection_control.so
connection_control=FORCE                         # 强制启用
connection_control_min_connection_delay=300000   # 最大延迟登录时间,单位毫秒。
connection_control_failed_connections_threshold=5 # 登录失败次数,默认为3

local_infile = 0         # 禁止local_infile

skip_symbolic_links=yes  # 禁止符号连接

数据安全防护:

定期备份,使用定期备份脚本进行数据库备份,配合定时任务执行。 示例:

#!/bin/bash

# MySQL 连接信息
USER="root"
PASSWORD="password"
HOST="localhost"
DATABASE="mydatabase"

# 备份文件保存路径和名称
BACKUP_DIR="/path/to/backup/dir"
BACKUP_FILE="$BACKUP_DIR/mydatabase_$(date +%Y%m%d%H%M%S).sql"

# 创建备份文件夹
mkdir -p $BACKUP_DIR

# 执行备份
mysqldump -u$USER -p$PASSWORD -h$HOST $DATABASE > $BACKUP_FILE

# 输出备份结果
echo "Backup completed: $BACKUP_FILE"

定时任务,这将在每天凌晨 1 点自动执行备份操作。

0 1 * * * /path/to/backup/mysql.sh

本文由 mdnice 多平台发布

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不喜欢热闹的孩子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值