实战笔记 | CentOS 8 下 MariaDB 数据库安全加固全流程(密码策略 / 日志 / SSL / 审计)
MariaDB 数据库安全加固环境centos8数据库MariaDB本文基本sql语句同样适用于MYSQL本文记录在 CentOS 8 环境下对 MariaDB 进行安全加固的全过程涵盖密码策略、日志加固、管理员 IP 限制、SSL 加密等十个方面并附上踩坑记录有问题欢迎指出~文章目录MariaDB 数据库安全加固一、配置密码复杂度二、确保数据库密码无空口令三、数据库日志加固1. 查询错误日志是否开启2. 查看回滚日志是否开启3. 普通查询日志是否开启4. 慢查询是否开启5. 审计是否开启四、关键配置加固1. 数据库管理员限制 IP 访问2. 数据库网络连接启用 SSL 加密3. 数据库网络连接限制 Socket 连接数4. 查询数据库文件路径是否合适5. 数据库命令执行历史记录6. 账号超时登出7. 查看测试数据库是否存在8. 查看是否可以读取本地文件9. 是否可以访问数据库目录以外的文件10. 查看 host 存在 % 的用户操作实践中遇到的一些问题及解决办法尾声一、配置密码复杂度查询密码复杂度规则详见问题及办法 1使用查询语句进行密码复杂度查询showvariableslikesimple_password_check%;尝试创建新的用户密码发现无法创建简单密码。更改密码策略临时生效重启后失效在数据库终端执行SETGLOBALsimple_password_check_minimal_length6;SETGLOBALsimple_password_check_digits1;SETGLOBALsimple_password_check_other_characters0;此时更改还不是永久每次重启数据库都会失效。永久配置退出数据库对文件进行更改vi/etc/my.cnf在文件中录入[mysqld] simple_password_check_minimal_length6 simple_password_check_digits1 simple_password_check_letters_same_case0 simple_password_check_other_characters0重启数据库再进入查询密码策略发现策略依旧保持说明策略永久保持了。二、确保数据库密码无空口令查询是否存在空口令用户空口令允许用户直接进入数据库具有安全风险。查询输入SELECTUser,Host,PasswordFROMmysql.user;或者直接查询空口令用户SELECTUser,HostFROMmysql.userWHEREPassword;得到查询数据后发现口令为空的用户root 在不同的 host也是不同的用户账号。加固方式直接删除空口令账号或为空口令账户配置口令。这里我们选择配置两个口令、删除一个空口令账号。再次查询发现所有用户均不为空口令用户加固完成。三、数据库日志加固1. 查询错误日志是否开启SHOWGLOBALVARIABLESLIKElog_warnings;可以看到错误日志正确输入进了目录文件中而不是输出到控制台 stderr这使我们能够查询所有报错日志。如果错误日志未指定需要手动将日志固定到指定文件中。编辑/etc/my.cnf在[mysqld]段添加[mysqld] log_error/var/log/mariadb/mariadb-error.log log_warnings2说明log_error指定错误日志文件log_warnings2增强告警记录连接失败等安全事件创建日志目录并设置权限日志加固重要一步防止普通用户读取敏感日志mkdir-p/var/log/mariadbchownmysql:mysql /var/log/mariadbchmod700/var/log/mariadb2. 查看回滚日志是否开启知识预热在 MySQL 中回滚加固方式可以用于保证数据库的完整性。回滚日志保存了事务发生之前数据的一个版本可以用于回滚同时可以提供多版本并发控制下的读MVCC也即非锁定读。检查方式在 MySQL 中执行命令确保innodb_undo相关变量有设置具体值且innodb_data_file_path中指定的共享表大小不为 0。输入命令-- innodb 重做日志SHOWGLOBALVARIABLESLIKEinnodb_log_file%;-- undo 回滚日志SHOWGLOBALVARIABLESLIKEinnodb_undo%;3. 普通查询日志是否开启知识预热在 MySQL 中普通查询日志用来记录用户的所有操作包括启动和关闭 MySQL 服务、更新语句和查询语句等默认情况下是关闭的。输入SHOWGLOBALVARIABLESLIKEgeneral_log;general_log ON开启记录所有 SQL磁盘消耗极大general_log OFF关闭默认推荐生产环境不常开更改配置后重启数据库使配置生效。4. 慢查询是否开启知识预热MySQL 的慢查询日志用来记录响应时间超过阈值的语句具体指运行时间超过long_query_time值的 SQL会被记录到慢查询日志中。输入SHOWGLOBALVARIABLESLIKEslow_query_log;slow_query_log ON已开启slow_query_log OFF关闭查看慢查询阈值超过这个时间就记录单位秒SHOWGLOBALVARIABLESLIKElong_query_time;加固方式在/etc/my.cnf.d中输入配置信息更改配置后重启数据库使配置生效。5. 审计是否开启知识预热MySQL 的审计功能主要可以记录下对数据库的所有操作包括登录、连接、对表的增删改查等便于责任追溯、问题查找当然一定程度上也会影响数据库效率。查询审计变量在数据库中执行 SQL 语句查看是否存在 audit 相关选项SHOWGLOBALVARIABLESLIKEserver_audit%;说明未安装审计插件输入命令进行安装再次查询审计状态。加固方法开启审计在/etc/my.cnf.d中添加server_auditON server_audit_loggingON server_audit_eventsCONNECT,QUERY,TABLE server_audit_file_path/var/log/mariadb/audit.log server_audit_file_rotate_size10485760添加配置后重启数据库再进入数据库查验此时审计成功开启加固成功。四、关键配置加固1. 数据库管理员限制 IP 访问知识预热管理员账号拥有极高的权限通过限制管理员账号的可登录 IP可以从一定程度上减少管理员账号被盗用的风险从而提高安全性。查询 root 所有 hostSELECTuser,hostFROMmysql.userWHEREuserroot;这里有三个独立账号密码可以各自不一样rootlocalhost本地 socket 登录mysql -uroot -p默认匹配这个账号root127.0.0.1本地 TCP 127.0.0.1 登录root192.168.31.10允许从本机网卡 IP 192.168.31.10 远程登录 root加固方案删除root192.168.31.10只保留本地访问。该账号允许 root 通过网卡 IP 登录存在被利用进行远程暴力破解的风险执行DROP USER删除该远程 root 账号限制 root 管理员仅可本地访问完成访问 IP 加固。加固完成。后续如果需要远程登录可以新创建一个新用户用于远程登录而不是使用 root。2. 数据库网络连接启用 SSL 加密知识预热SSLSecure Socket Layer安全套接字层利用数据加密、身份验证和消息完整性验证机制为基于 TCP 等可靠连接的应用层协议提供安全性保证。如果客户端连接服务器获取数据不是使用 SSL 连接传输过程中数据就可能被窃取。在数据库中执行语句查看have_ssl的值是否为YESshowglobalvariableslike%ssl%;发现支持 ssl只是未能配置。加固方式查看是否存在证书文件ls/etc/mysql/ssl/若没有则#1. 创建目录mkdir-p/etc/mysql/sslcd/etc/mysql/ssl#2. 生成CA证书openssl genrsa2048ca-key.pem openssl req-new-x509-nodes-days3650-keyca-key.pemca.pem#3. 生成服务器证书与私钥openssl req-newkeyrsa:2048-days3650-nodes-keyoutserver-key.pemserver-req.pem openssl rsa-inserver-key.pem-outserver-key.pem openssl x509-req-inserver-req.pem-days3650-CAca.pem-CAkeyca-key.pem-set_serial01server-cert.pem#4. 修改属主和权限关键chownmysql:mysql /etc/mysql/ssl/*chmod600/etc/mysql/ssl/*#5. 查看ssl文件和权限关键ls-l/etc/mysql/ssl/最后出现五个文件说明 ssl 文件创建成功。接下来修改配置文件vi/etc/my.cnf重启 MariaDB 使配置生效。遇到问题见问题及解决方法 3。3. 数据库网络连接限制 Socket 连接数知识预热数据库的最大连接数规定了同一时间允许连接到该数据库上的连接个数。如果最大连接数过大则会浪费资源如果过小则会导致访问数据库时出错。需要根据实际业务场景合理设置最大连接数。加固检查查看max_connections的值是否合理mysqlshowvariableslikemax_connections;加固方式在配置文件/etc/my.cnf中添加或修改对应值然后重启数据库。重启数据库后重新查询发现数值更改加固成功。4. 查询数据库文件路径是否合适知识预热在加固系统中分为系统分区和非系统分区。应将数据库安装在非系统分区中避免由于拒绝服务攻击耗尽分区磁盘资源从而影响系统运行。检查方式在数据库中执行查询语句查看datadir对应的路径showvariableswherevariable_namedatadir;加固方式把datadir迁移到独立分区/data。/var属于系统分区数据库持续写入会占满系统分区导致整个操作系统崩溃需进行修改。Step1 停止mysqld服务 systemctl stop mysqld Step2 创建data文件夹将/var/lib/mysql移到指定文件夹 mv /var/lib/mysql /data/mysql Step3 修改文件夹权限 chown -R mysql:mysql /data/mysql chmod -R 700 /data/mysql Step4 编辑my.cnf修改datadir添加配置 [mysqld] datadir/data/mysql socket/data/mysql/mysql.sock [client] socket/data/mysql/mysql.sock Step5 重启数据库然后查询新的路径发现路径更改成功加固成功。5. 数据库命令执行历史记录知识预热用户对数据库的所有操作命令会存储在.mysql_history文件中该文件为数据库安装后自动生成不能够被删除。一旦该文件被攻击者获取就可能造成严重的安全问题。检查方式查看用户家目录下是否存在.mysql_history文件ls-a|grepmysql_history输出.mysql_history加固方式为提升系统安全性不记录用户对数据库的操作命令可以采用软链接的方式进行加固rm-rf~/.mysql_historyln-s/dev/null ~/.mysql_history加固后验证ls-l~/.mysql_history加固成功之后再登录 mysql 执行任何 SQL不会再保存命令历史。注意只对当前用户生效如果切换其他用户登录 mysql需要在对应用户家目录做同样操作。6. 账号超时登出知识预热数据库服务器所支持的最大连接数是有上限的因为每个连接的建立都会消耗内存因此我们希望客户端在连接到 MySQL Server 处理完相应操作后应该断开连接并释放占用的内存。此外如果管理员账号长时间不退出就可能存在通过管理员物理主机进行攻击的行为。检查方式在 MySQL 中执行语句查看wait_timeout和interactive_timeout的时间是否合理。其中wait_timeout为服务器关闭非交互连接之前等待活动的秒数interactive_timeout为服务器关闭交互式连接前等待活动的秒数。SHOWGLOBALVARIABLESLIKE%timeout%;发现interactive_timeout和wait_timeout现在是 28800。加固方式在配置文件/etc/my.cnf中添加或修改配置项[mysqld] wait_timeout10000 interactive_timeout10000配置完后重启数据库检查超时配置信息。配置生效现在数据库闲置会话超时缩短空闲连接自动断开降低长期未关闭会话带来的安全风险加固成功。7. 查看测试数据库是否存在知识预热测试数据库可供所有用户访问并可用于消耗系统资源。删除测试数据库将减少 MySQL 服务器的攻击面。检查方式执行 MySQL 语句查看当前是否存在测试数据库mysqlSHOWDATABASESLIKEtest;这里我的虚拟机内不存在说明加固已完成。加固方式如果存在测试数据库进行删除操作mysqlDROPDATABASEtest;8. 查看是否可以读取本地文件知识预热如果可以通过 SQL 语句读取本地文件那么攻击者就可以通过 SQL 注入获取本地敏感文件。检查方式执行 SQL 语句查看local_infile参数mysqlshowvariableslikelocal_infile;ValueON开启存在风险需要加固ValueOFF已经关闭加固完成加固方式修改 MySQL 配置文件/etc/my.cnf添加或修改配置项[mysqld] local_infileOFF重启数据库后检查发现本地文件读取已不允许加固成功。9. 是否可以访问数据库目录以外的文件知识预热多个客户可能会访问同一个数据库若使用链接文件可能会导致外部客户锁定 MySQL 服务器。开启skip_symbolic_links可以禁止数据库用户删除或重命名数据文件目录之外的文件。检查方式执行 SQL 语句查看have_symlink参数mysqlSHOWvariablesLIKEhave_symlink;加固方式修改 MySQL 配置文件/etc/my.cnf添加或修改配置项[mysqld] skip_symbolic_linksYES10. 查看 host 存在 % 的用户知识预热在 user 表中host 指定了允许登录的主机%起到通配符的作用如果 host 为%则代表允许所有主机登录。在使用远程登录时为了方便可能会进行这样的配置但是这样也会扩大攻击面。检查方式执行 SQL 语句查看 user 表中是否存在 host 为%的用户mysqlselectuser,hostfrommysql.userwherehost%;未查询到对应用户加固完成。加固方式如果存在则需要指定该用户的 host 或将该用户进行删除mysqlUPDATEuserSETHost192.168.23.162whereuserroot;或mysqlDROPUSERusername;操作实践中遇到的一些问题及解决办法问题 1centos8 中自带的 MariaDB 没有安装密码校验插件导致校验查询语句失败解决方法使用轻量级插件simple_password_check不用 yum 安装MariaDB 自带。在数据库终端执行加载插件语句INSTALL PLUGIN simple_password_checkSONAMEsimple_password_check.so;再查询密码策略变量showvariableslikesimple_password_check%;问题 2慢查询日志未开启进行配置后发现仍然未能开启原因每次修改配置文件后都需要对数据库进行重启才能使配置生效。问题 3修改 ssl 配置后发现无法正常启动数据库解决方法注释掉 ssl 配置代码发现重启成功所以是 ssl 配置代码出问题。删掉require_secure_transportMariaDB 10.3 不支持这个参数成功重启检查 ssl 状态发现 ssl 启动加固成功。尾声至此关于数据库层面的安全加固已经基本完成后续补充敬请期待咕咕嘎嘎~

相关新闻

OWASP 邮箱校验与验证实战指南:身份系统中的 Email Validation and Verification 安全实践

OWASP 邮箱校验与验证实战指南:身份系统中的 Email Validation and Verification 安全实践

应用安全 【免费下载链接】CheatSheetSeries The OWASP Cheat Sheet Series was created to provide a concise collection of high value information on specific application security topics. 项目地址: https://gitcode.com/gh_mirrors/ch/CheatSheetSeries 点…

2026/9/30 13:48:07 阅读更多 →
YOLOv7目标检测落地全流程:数据标注、模型优化与边缘部署实践

YOLOv7目标检测落地全流程:数据标注、模型优化与边缘部署实践

1. 一次完整落地,远比跑通demo复杂我最早接触YOLOv7,是帮朋友做一个工厂安全帽检测。当时网上教程很多,看起来从克隆仓库到跑出结果也就半小时。可真到了自己从零做数据、训练、再部署到设备上,才发现每一步都是坑:标注…

2026/9/30 13:47:06 阅读更多 →
计算机网络综合题高效复习:从题型拆解到协议栈贯通

计算机网络综合题高效复习:从题型拆解到协议栈贯通

简介:围绕计算机网络课程中 IP 地址、子网划分、CIDR 路由与 VLAN 配置等高频综合题,整理出一份 doc 文档,汇编了多道典型计算与实例分析题,每题均附逐步解答和关键结论。内容覆盖二进制与十进制 IP 互换、地址类别判定、子网掩码…

2026/9/30 13:47:06 阅读更多 →

最新新闻

在 Kubernetes 里跑对象存储的三个方案:Helm、Operator、以及什么时候别用 K8s

在 Kubernetes 里跑对象存储的三个方案:Helm、Operator、以及什么时候别用 K8s

把对象存储搬进 K8s 的动机通常是"顺便",反正集群已经在跑,再加一套存储也不差一个 StatefulSet。但存储和 Web 应用在 K8s 里的相处方式完全不同:Web 应用挂了重启没事,存储的 StatefulSet 挂了要考虑 PVC 会不会丢、分…

2026/9/30 14:30:25 阅读更多 →
docker部署nacos3.1.0适配pgsql

docker部署nacos3.1.0适配pgsql

摘要:本文介绍如何在 Docker 中部署 Nacos 3.1.0 并接入 PostgreSQL 数据库。主要步骤包括:拉取镜像、创建并授权宿主机目录、通过临时容器拷贝配置文件、在 PostgreSQL 中创建 Nacos 所需数据表、修改数据源与鉴权配置、上传 PostgreSQL 驱动插件&#…

2026/9/30 14:30:25 阅读更多 →
从 “银丝神叶” 到一杯可泡的本草:知医邦杜仲叶泡泡茶的技术破局

从 “银丝神叶” 到一杯可泡的本草:知医邦杜仲叶泡泡茶的技术破局

杜仲叶最鲜明的身份标识,藏在它的断面之中 —— 随手撕开一片鲜叶,断面会牵出无数细密银白、富有弹性的细丝。这是杜仲科植物独有的特征,也是民间鉴别杜仲真伪最直观的方法。这些银丝本质是杜仲胶,一种反式结构的天然高分子聚合物…

2026/9/30 14:30:25 阅读更多 →
Responses WebSocket 协议详解:为什么它会让 Agent 工作流更快——TaoToken 统一 Key 接入 Codex CLI 的 config.toml 骨架与 continua

Responses WebSocket 协议详解:为什么它会让 Agent 工作流更快——TaoToken 统一 Key 接入 Codex CLI 的 config.toml 骨架与 continua

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/30 14:30:25 阅读更多 →
多模型聚合网关:企业级统一接入的落地实践与踩坑复盘

多模型聚合网关:企业级统一接入的落地实践与踩坑复盘

1. 背景:业务问题与引入动机 我所在的零售集团数据智能部,负责为集团 12 条业务线提供 AI 能力,包括智能客服、商品描述生成、订单地址解析、营销文案等。到 2025 年底,各业务线已先后接入了 6 家大模型厂商的 10 个模型实例&…

2026/9/30 14:30:25 阅读更多 →
Linux下查看Python 版本方法

Linux下查看Python 版本方法

关于linux如何查看版本的问题, 在此为各位分享在linux系统中能够使用的三种查看版本的实际方法。检查 版本这句话的意思是, 这个软件在大多数Linux发行版和macOS上事先就装好了。要找出系统上安装的默认的 版本,请运行 – 或者 -V 命令:[linuxidclocalho…

2026/9/30 14:29:24 阅读更多 →

日新闻

Base64 图片头部特征识别:从文件头到格式判断的完整指南

Base64 图片头部特征识别:从文件头到格式判断的完整指南

1. 项目概述:为什么说看懂 base64 图片头部是基本功这几年跟 base64 打交道的机会越来越多,后端接口返回图片、前端渲染验证码、小程序里存小图、还有一些老系统导出报表,动不动就给你一段长到怀疑人生的 base64 字符串。很多人拿到字符串就直…

2026/9/30 0:00:35 阅读更多 →
Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

Java公交站牌广告管理系统:JSP+Servlet+MySQL实战落地指南

简介:本资源是一份面向Java初学者与课程设计学生的公交站牌广告灯箱管理系统毕业设计文档,聚焦城市公共广告资源信息化管理痛点,提供从需求分析到技术实现的完整方案。文档采用标准学术论文结构,含摘要、英文摘要、目录及五章正文…

2026/9/30 0:00:35 阅读更多 →
用 Redis Lua 构建大模型 API 多租户原子配额治理体系

用 Redis Lua 构建大模型 API 多租户原子配额治理体系

我去年年底接了一个内部 AI 平台的治理需求,背景很直接:公司把 DeepSeek、MiniMax 这类大模型 API 统一封装成内部网关,开放给几个业务团队用。结果第一个月账单出来,额度直接超了 4 倍。仔细查日志,发现原因并不复杂—…

2026/9/30 0:00:35 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/9/30 13:14:22 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/9/29 16:41:41 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/9/30 13:14:49 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/29 19:29:29 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/29 5:58:00 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/29 3:55:56 阅读更多 →