基于Linux对MySQL数据库的安全加固指南(超实用--实战版)

news2024/10/5 22:14:46

👨‍🎓博主简介

  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • 前言
  • 数据库加固实例
    • 1、修改mysql默认端口
    • 2、安装配置防火墙
    • 3、强化密码
    • 4、开启日志
    • 5、定期备份数据
    • 6、控制访问权限
      • 开放单用户及ip测试
      • 批量开放用户及ip测试
      • 禁止root用户远程登录
    • 6.1 附加
      • 删除用户
      • 批量删除用户
      • 修改root密码:(%为远程登陆,localhost为本机登录)
      • 安装mariadb时初始化数据库
      • 开启数据库远程连接
    • 7、监控和警报
  • 本文可参考文献
  • 相关文章:

IMG_202307267457_jpg.jpg

前言

MySQL数据库是业务系统中常用的关系型数据库,但是由于其广泛使用,也成为安全攻击的目标。因此,数据库安全加固至关重要。下面将为大家提供一份基于Linux的MySQL数据库安全加固指南,帮助大家保护自己及公司的数据库免受潜在的安全威胁。

常见的MySQL数据库攻击方式包括SQL注入,暴力破解和拒绝服务攻击。以下是一些简单的加固方法:

  • 1.修改默认端口:MySQL默认端口为3306,容易被攻击者扫描到,建议修改为其他端口。
  • 2.安装防火墙:通过配置防火墙,可以控制数据库的访问权限,并防止恶意请求。
  • 3.强化密码:使用强密码并定期更新。避免使用简单的密码,比如123456和qwerty等。强密码包括:(复杂密码应包括大小写字母、数字和特殊字符),可参考此文章随机生成密码:【Linux】Centos7 随机生成密码
  • 4.删除无用的账户:删除不必要的账户以减少攻击面。
  • 5.开启SSL/TLS连接:开启MySQL的ssl选项,启用加密传输可以提高安全性。
  • 6.控制访问权限:控制应用程序对MySQL的操作权限,限制只能读取和操作必要的表、字段和行。
  • 7.开启日志:开启MySQL的日志功能,记录所有的查询操作,以便后期审查和追踪攻击来源。
  • 8.定期备份数据,并将备份数据存储在安全的位置。备份是防止数据丢失和恢复数据的重要手段。这里推荐一份定时定期备份数据的脚本:mysql数据库定时备份脚本+定时删除 。
  • 9.禁用root远程登陆,启用访问控制: 在MySQL配置文件中启用访问控制,只允许特定的IP地址或主机名访问数据库。这样可以防止未授权的访问尝试。
  • 10.监控和警报: 设置数据库监控工具和警报系统,及时发现和响应潜在的安全事件和异常活动。

除了以上措施,还有一些其他的技巧可以帮助加强MySQL数据库的安全性。例如,使用双因素身份验证,设置入侵检测系统进行实时监控。

总之,MySQL数据库的安全加固是必要的,可以在攻击者趁虚而入之前有效地减少数据库安全风险。

下面给大家讲解一些实例吧!

数据库加固实例

1、修改mysql默认端口

在配置文件中修改端口,配置文件名为:“my.cnf”在服务器中的/etc/下;

  如果使用的是容器的方式部署的,可以修改一下创建容器时对外开放的端口,具体容器修改端口可参考:docker修改容器的端口、容器名、映射地址…

来看看容器外部署的数据库如何修改;

cat /etc/my.cnf

找到port,注意my.cnf可能会有两个port,一个是[client]下的,一个是[mysqld]下的,修改[mysqld] 下的port即可,client下的也可以修改,主要是[mysqld]下的生效;
修改完重启数据库,有一点如果访问不到,可以先查看端口有没有起来,如果起来了,就检查防火墙,如果没起来,就去看数据库启动报错或日志;

在这里插入图片描述

修改完重启一下服务即可生效。

2、安装配置防火墙

使用centos中自带的firewall-cmd来管理防火墙即可;

#开启防火墙
systemctl restart firewalld

#开放数据库的端口
#开放3306端口、加载防火墙配置、查看端口是否开放
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --list-ports | grep 3306

3、强化密码

可参考此文章随机生成密码:【Linux】Centos7 随机生成密码
这样安全性比较高,如果想要自己设置当然也可以;建议使用强密码并定期更新。避免使用简单的密码,比如123456和qwerty等。强密码包括:(复杂密码应包括大小写字母、数字和特殊字符)。

4、开启日志

开启log-bin日志,可在配置文件中开启;/etc/my.cnf

log-bin=mysql-bin

在这里插入图片描述

开启完,重启服务生效;


mariadb日志一般会存储在 /var/lib/mysql 下;
容器的方式部署的mysql,日志数据一般会存在 /var/lib/mysql/data/ 下。

在这里插入图片描述

5、定期备份数据

这里推荐一个定期备份的脚本:mysql数据库定时备份脚本+定时删除

建议放在数据库数据存储目录下(对于健忘的人来说比较好找),当然也可以自己找一个隐蔽安全的地方放起来(如果怕忘记,可以计一个笔记),然后设置定时任务,定时全备;

定时备份,需要写周期性计划任务:
#周期性计划任务(每天完备一次)
0 0 */1 * * root /bin/sh 脚本路径/back.sh

脚本可修改的内容:
1、数据库信息:用户名、密码、ip、端口
2、备份的路径及日志文件名
3、脚本保留的天数
4、要备份的库(注意里面的说明,如需备份多个库,可以用到数组,如只备份一个库,可直接使用命令备份即可,总之,注意里面的说明)
5、备份库的文件名和打包备份的文件名 6、日志文件内打印的内容

日志文件的内容展示:
— 创建备份文件: 20230510.sql.tgz
开始:2023年05月10日 16:06:15 结束:2023年05月10日 16:06:20 succ

6、控制访问权限

说明:
username:你将创建的用户名
host:指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost,如果想让该用户可以从任意远程主机登陆,可以使用通配符%
password:该用户的登陆密码,密码可以为空,如果为空则该用户可以不需要密码登陆服务器

  • 限制访问数据库ip和用户名

开放的ip:
localhost
172.16.11.11
172.16.11.12
172.16.11.13
172.16.11.14

这时候先不要删除远程登录,可以先在远程连接的第三方工具连接创建普通用户和指定某一个ip,因为linux查看用户列表的时候视觉感不是很好,所以等创建完指定ip和用户名,测试完之后,在关闭远程登陆和root登陆。提示:切记要互相可以ping通,才可以,否则设置了要是连不上问题还要找好久。

  • 使用navicat连接到数据库;
#进入mysql库中
use mysql;

#查看当前可以访问到该数据库的用户和权限
select * from user;

可以看到本地和远程都可以连接到该数据库,那么下来我们就给他做限制;

在这里插入图片描述

开放单用户及ip测试

#首先创建一个库,(后面要用到这个库)
create database cs;

#创建一个用户
create user cs@'localhost' identified by '123123';
#给该用户设置权限(只给cs这个库的所有权限)
grant all privileges on cs.* to 'cs'@'localhost' identified by '123123';
#其实他两可合并为一条命令,那就是直接执行第二条就行;
#PROCESS权限,可以执行解释执行计划操作的权限(需要额外授予表上的select权限)。
#授权PROCESS权限
grant process on *.* to 'cs'@'localhost';
#刷新权限
flush privileges;

#查看用户权限(只可以用root用户查看)
#该命令可以在linux上执行查看,也可以在其他工具上查看
show grants for 'cs'@'localhost';
#或者(该命令仅限于linux上查看)
select * from mysql.user where user="cs" \G;
  • 查看权限

在这里插入图片描述
在这里插入图片描述

  • 然后看mysql/user表,可以看到多了一个cs用户,只可以本地访问数据库,然后测试登陆;

在这里插入图片描述

mysql -ucs -p123123

在这里插入图片描述

成功登陆,并且有cs这个库的所有权限;
而用第三方登陆,就登陆不上,比如我们用navicat连接测试;
很显然,登陆不上的这是;

在这里插入图片描述

批量开放用户及ip测试

#批量创建用户
create user cs@'172.16.11.11',cs@'172.16.11.12',cs@'172.16.11.13',cs@'172.16.11.14' identified by '123123';
#给批量用户设置权限(只给cs这个库的所有权限)
grant all privileges on cs.* to cs@'172.16.11.11',cs@'172.16.11.12',cs@'172.16.11.13',cs@'172.16.11.14' identified by '123123';
#其实他两可合并为一条命令,那就是直接执行第二条就行;
#PROCESS权限,可以执行解释执行计划操作的权限(需要额外授予表上的select权限)。
#授权PROCESS权限
grant process on *.* to cs@'172.16.11.11',cs@'172.16.11.12',cs@'172.16.11.13',cs@'172.16.11.14';
#刷新权限
flush privileges;

#查看用户权限(只可以用root用户查看)
#该命令可以在linux上执行查看,也可以在其他工具上查看(此命令只可每次查一个)
show grants for 'cs'@'172.16.11.11';
#或者(该命令仅限于linux上查看,可以查看所有的cs用户,并输出所有信息)
select * from mysql.user where user="cs" \G;

在这里插入图片描述

  • 然后看mysql/user表,可以看到多了一个好几个cs用户,但是host不一样,也就是可以访问的ip主机不一样,只有上面显示的这几个访问数据库,然后测试登陆;

在这里插入图片描述

也可以使用mysql命令远程登陆测试,如果你在其他服务器上想访问本地服务器的数据库,前提是必须可以ping通要访问某台数据库的ip,可以使用:

mysql -h IP -P端口 -u用户名 -p密码

例如:
mysql -h 172.16.10.10 -P3306 -uroot -p123123

禁止root用户远程登录

禁止root用户远程登录(切记要留一条root使用localhost登陆的,如果没有就不要禁用了,因为禁用了你就真的在哪都使用不了root了,就需要重新安装了)

delete from user where user='root' and host='%';
#刷新权限
flush privileges;

#可以再次查询一下是否存在
select * from mysql.user where user="root" \G;

可以看到只剩一个root@localhost了,那么就成功禁用的root远程登陆;

在这里插入图片描述

6.1 附加

删除用户

drop user cs@'172.16.11.11';

批量删除用户

drop user cs@'172.16.11.12',cs@'172.16.11.13';

修改root密码:(%为远程登陆,localhost为本机登录)

alter user 'root'@'localhost' identified by '要修改的密码';
alter user 'root'@'%' identified by '要修改的密码';

#刷新权限
flush privileges;

安装mariadb时初始化数据库

mysql_secure_installation

开启数据库远程连接

grant all privileges  on *.* to root@'%' identified by "123123";

#刷新权限
flush privileges;

7、监控和警报

可以使用zabbix取关键词告警或者是Prometheus + Grafana;
推荐文章:

  • zabbix添加自定义监控项&告警(邮件)
  • 【Linux】部署Prometheus + Grafana简介、监控及设置告警详细操作(多种方式安装,亲测无问题)

本文可参考文献

文章标题文章地址
【Linux】Centos7 随机生成密码http://t.csdn.cn/RnMZf
mysql数据库定时备份脚本+定时删除 https://download.csdn.net/download/liu_chen_yang/87776124?spm=1001.2014.3001.5503
docker修改容器的端口、容器名、映射地址…https://liucy.blog.csdn.net/article/details/124511738
zabbix添加自定义监控项&告警(邮件)https://liucy.blog.csdn.net/article/details/124101253
【Linux】部署Prometheus + Grafana简介、监控及设置告警详细操作(多种方式安装,亲测无问题)https://liucy.blog.csdn.net/article/details/131049402
mysql、mysqldump命令离线包(可直接使用命令)https://download.csdn.net/download/liu_chen_yang/87769961?spm=1001.2014.3001.5503
【Linux】Centos安装mariadb并授权远程登陆https://liucy.blog.csdn.net/article/details/132077172

相关文章:

文章标题文章地址
基于Linux对MySQL数据库的安全加固指南(超实用)https://liucy.blog.csdn.net/article/details/131936739
Centos7安装Mysql5.7(超详细版)https://liucy.blog.csdn.net/article/details/124930789
【Linux】Centos安装mariadb并授权远程登陆https://liucy.blog.csdn.net/article/details/132077172
【云原生】Docker之创建并进入mysql容器https://liucy.blog.csdn.net/article/details/126288434

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1011701.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

零基础学前端(四)重点讲解 CSS

1. 该篇适用于从零基础学习前端的小白 2. 初学者不懂代码得含义也要坚持模仿逐行敲代码,以身体感悟带动头脑去理解新知识 3. 初学者切忌,不要眼花缭乱,不要四处找其它文档,要坚定一个教授者的方式,将其学通透&#xff…

柏曼的护眼台灯怎么样?明基、书客、柏曼护眼台灯测评对比

台灯是最常见的一种照明灯具,基本每家每户都有着一台,大多数是给孩子学习使用的。而且现在的孩子学习压力都非常繁重,导致很多孩子早早就开始近视了。不少家长也开始重视孩子的视力健康,给孩子挑选护眼台灯。不过市面上的护眼台灯…

抖去推爆款视频生成器怎么制作开发?--短视频矩阵系统研发

在当今的数字时代,短视频已经成为一种非常受欢迎的内容形式。人们通过观看短视频来获取娱乐、学习和营销信息。然而,制作优秀的爆款视频并不容易,这需要创意、技能和时间。为了简化这一过程,抖去推推出了一款爆款视频生成器&#…

无CDN场景下的传统架构接入阿里云WAF防火墙的配置实践

文章目录 1.配置网站接入WAF防火墙1.1.配置网站接入方式1.2.填写网站的信息1.3.WAF防火墙生成CNAME地址 2.配置WAF防火墙HTTPS证书3.修改域名DNS解析记录到WAF防火墙4.验证网站是否接入WAF防火墙 传统架构接入WAF防火墙非常简单,配置完WAF网站接入后,将得…

KPM算法

概念 KMP(Knuth–Morris–Pratt)算法是一种字符串匹配算法,用于在一个主文本字符串中查找一个模式字符串的出现位置。KMP算法通过利用模式字符串中的重复性,避免无意义的字符比较,从而提高效率。 KMP算法的核心思想是…

【持续记录】深度学习环境配置

1080面对Transformer连勉强也算不上了,还是要去用小组公用的卡 完整记一个环境配置,方便后面自用✍️ nvidia-smi查看GPU信息 ** CUDA版本12.2 conda -V查询conda版本 22.9.0 新建conda环境 准备装python3.8 conda create --name caiman python3.8.2激…

Apollo自动驾驶平台的未来展望:从智能出行到城市管理

引言: 自动驾驶技术已经从科幻概念变为现实,而Baidu的Apollo自动驾驶平台正处于这一技术浪潮的前沿。但Apollo的潜力远远不止于此,它有可能引领整个城市的未来发展。本文将探讨Apollo自动驾驶平台在未来的展望,从智能出行到城市管…

VS Code用AI写代码:Codeium插件

文章目录 Codeiumchat代码生成 Codeium Codeium是基于边缘计算的代码AI工具,提供超过70种编程语言的代码补全、对话、搜索等功能,相当霸道。 在插件栏搜索到Codeium之后,需要科学上网安装,安装完成后会提示注册。注册之后&#…

这应该是Linux用户与用户组最详细的知识了吧!

【微|信|公|众|号:厦门微思网络】 Linux学习专栏​ 1、用户和用户组文件 在 linux 中,用户帐号,用户密码,用户组信息和用户组密码均是存放在不同的配置文件中的。 在 linux 系统中,所创建的用户帐号和其相关信息 (密…

考虑可再生能源消纳的建筑综合能源系统日前经济调度模型(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

基于智能远程监考方案,云上组考打造考试新范式

热潮兴起,「云上组考」是怎样炼成的? 疫情以来,改变了很多场景形态,“考试”是其中之一。 越来越多的学校开始采用云上组考模式,提高考试效率,节省人力、物力成本,规范考试管理,引发…

掌握Linux服务器:构建、管理和优化稳健的互联网基础设施

💂 个人网站:【工具大全】【游戏大全】【神级源码资源网】🤟 前端学习课程:👉【28个案例趣学前端】【400个JS面试题】💅 寻找学习交流、摸鱼划水的小伙伴,请点击【摸鱼学习交流群】 引言 Linux服务器是构建…

基于SpringBoot+Vue+MySQL实现的高校固定资产管理系统源代码+数据库

基于 Vue 和 SpringBoot 的高校固定资产管理系统 完整代码下载地址:高校固定资产管理系统 软件简介 基于 Vue 和 SpringBoot 的高校固定资产管理系统,用于实现高校对固定资产的管理需求,包含资产品类、资产单位、资产仓库、资产供应商、资…

分布式文件系统的新兴力量:揭秘Alluxio的元数据管理机制【文末送书】

文章目录 写在前面01 分布式文件系统元数据的常见类型1.1 文件(inode)元数据1.2 数据块(block)元数据1.3 Worker元数据 02 分布式文件系统元数据的存储模式2.1 元数据存储在堆上(HEAP模式)2.2 元数据存储在…

智安网络|提升企业网络安全:避免成为勒索软件攻击的目标

勒索软件是当前网络世界中一种威胁严峻的恶意软件类型,勒索软件攻击近年来不断增加,越来越多的企业成为勒索软件攻击的目标。这种攻击方式通过加密敏感数据,并勒索企业支付赎金以解锁数据,给企业造成严重的经济损失与声誉风险。企…

GDB之call、print手动调用函数(十一)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

SSM - Springboot - MyBatis-Plus 全栈体系(八)

第二章 SpringFramework 四、SpringIoC 实践和应用 4. 基于 配置类 方式管理 Bean 4.4 实验三:高级特性:Bean 注解细节 4.4.1 Bean 生成 BeanName 问题 Bean 注解源码: public interface Bean {//前两个注解可以指定Bean的标识AliasFor…

【计算机视觉 | 图像模型】常见的计算机视觉 image model(CNNs Transformers) 的介绍合集(六)

文章目录 一、Co-Scale Conv-attentional Image Transformer(CoaT)二、Pyramid Vision Transformer v2(PVTv2)三、Class-Attention in Image Transformers(CaiT)四、PoolFormer五、ScaleNet六、VoVNet七、Siamese U-Net八、Single…

MT4和MT5的共同点,anzo capital昂首资本说一个,没人有意见吧

相信很多交易者对MT4和MT5都不会陌生,但您了解他们背后之间的关系吗?今天anzo capital昂首资本就和各位交易者一起聊聊,没人有意见的MT4和MT5的共同点。 其实谈起MT4和MT5,就不得不聊聊他们背后的公司MetaQuotes,MetaQuotes 是…

家政小程序源码家政预约小程序独立版,家政上门预约,功能强大

家政服务行业作为一个相对传统的行业,随着互联网的发展迅速,和用户群体的改变,家政服务公司也需要改变一下经营思路了,否则未来很难满足新一代用户群体的个性化需求。 核心功能: 1、师傅(服务人员)入驻:家…