mysql安全加固配置文档(完结)
4. MySQL 权限安全配置
4.1. 确保只有管理员账号有所有数据库的访问权限
- 建议理由 
- 除了管理员账号,其他用户没必要有所有数据库的访问权限。过高的权限会导致安全问题。
 
 - 检查方法 
- SELECT user, host FROM MySQL.user WHERE (Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') OR (Create_priv = 'Y') OR (Drop_priv = 'Y');
 - SELECT user, host FROM MySQL.db WHERE db = 'MySQL' AND ((Select_priv = 'Y') OR (Insert_priv = 'Y') OR (Update_priv = 'Y') OR (Delete_priv = 'Y') 45 | Page OR (Create_priv = 'Y') OR (Drop_priv = 'Y'));
 - 如果返回的都是管理员账号说明安全,否则需要对用户清除权限
 
 - 修复建议 
- 清除非管理员账号的过高部分权限
 
 
4.2. 非管理员账号file_priv不应该设置成Y
- 建议理由 
- file_priv权限允许MySQL用户对磁盘进行读写操作。黑客很可能利用这一点盗取数据库中敏感数据。
 
 - 检查方法 
- select user, host from MySQL.user where File_priv = 'Y';
 - 如果返回的都是管理员账号,否则需要对用户清除权限
 
 - 修复建议 
- REVOKE FILE ON *.* FROM '<user>’;
 
 
4.3. 非管理员账号process_priv不应该设置成Y
- 建议理由 
- process_priv权限允许委托账号查看当前正在执行的sql语句。使用超越当前用户权限的权利。可以被攻击者所利用。
 
 - 检查方法 
- select user, host from MySQL.user where Process_priv = 'Y';
 - 如果返回的都是管理员账号则是安全的,否则需要对用户清除权限
 
 - 修复建议 
- REVOKE PROCESS ON *.* FROM '<user>’;
 
 
4.4. 非管理员账号super_priv不应该设置成Y
- 建议理由 
- super_priv权限允许委托账号执行任意语句,非管理员不应该具备该权限。
 
 - 检查方法 
- select user, host from MySQL.user where Super_priv = 'Y';
 - 如果返回的都是管理员账号则是安全的,否则需要对用户清除权限
 
 - 修复建议 
- REVOKE SUPER ON *.* FROM '<user>’;
 
 
4.5. 非管理员账号shutdown_priv不应该设置成Y
- 建议理由 
- shutdown_priv权限允许委托账号关闭数据库,会造成一定安全隐患。
 
 - 检查方法 
- SELECT user, host FROM MySQL.user WHERE Shutdown_priv = 'Y';
 - 如果返回的都是管理员账号则是安全的,否则需要对用户清除权限
 
 - 修复建议 
- REVOKE SHUTDOWN ON *.* FROM '<user>’;
 
 
4.6. 非管理员账号create_user_priv不应该设置成Y
- 建议理由 
- create_user_priv权限允许委托账号创建任意用户,会造成一定安全隐患。
 
 - 检查方法 
- SELECT user, host FROM MySQL.user WHERE Create_user_priv = 'Y';
 - 如果返回的都是管理员账号则是安全的,否则需要对用户清除权限
 
 - 修复建议 
- REVOKE CREATE USER ON *.* FROM '<user>’;
 
 
4.7. 非管理员账号grant_priv不应该设置成Y
- 建议理由 
- Grant_priv权限允许委托账号对其他用户赋权,可能会被黑客利用造成一定安全隐患。
 
 - 检查方法 
- SELECT user, host FROM MySQL.user WHERE Grant_priv = 'Y';
 - 如果返回的都是管理员账号则是安全的,否则需要对用户清除权限
 
 - 修复建议 
- REVOKE Grant ON *.* FROM '<user>’;
 
 
4.8. 非管理员账号reload_priv不应该设置成Y
- 建议理由 
- reload_priv权限可以对本地文件进行操作,可能会被黑客利用造成一定安全隐患。
 
 - 检查方法 
- SELECT user, host FROM MySQL.user WHERE reload_priv = 'Y';
 - 如果返回的都是管理员账号则是安全的,否则需要对用户清除权限
 
 - 修复建议 
- REVOKE reload ON *.* FROM '<user>’;
 
 
4.9. 非管理员账号repl_slave_priv不应该设置成Y
- 建议理由 
- repl_slave_priv用于从主服务器上获得更新的数据。黑客很可能利用这一点盗取数据库中敏感数据。
 
 - 检查方法 
- select user, host from MySQL.user where repl_slave_priv = 'Y';
 - 如果返回的都是管理员账号,否则需要对用户清除权限
 
 - 修复建议 
- REVOKE repl_slave ON *.* FROM '<user>’;
 
 
4.10. 确保DML/DDL权限只在特定用户手上
- 建议理由 
- 限制用户有INSERT,SELECT,UPDATE,DELETE,DROP,CREATE和ALTER权限。这些权限都会导致数据泄密等。
 
 - 检查方法 
- SELECT User,Host,Db FROM MySQL.db WHERE Select_priv='Y' OR Insert_priv='Y' OR Update_priv='Y' OR Delete_priv='Y' OR Create_priv='Y' OR Drop_priv='Y' OR Alter_priv='Y';
 - 如果返回的都是管理员账号,否则需要对用户清除权限
 
 - 修复建议 
- REVOKE SELECT ON . FROM ; REVOKE INSERT ON . FROM ; REVOKE UPDATE ON . FROM ; REVOKE DELETE ON . FROM ; REVOKE CREATE ON . FROM ; REVOKE DROP ON . FROM ; REVOKE ALTER ON . FROM ;
 
 
5. 审计和日志安全配置
5.1. 确保log_error日志启动
- 建议理由 
- 启用错误日志有可能会增加检测到针对MySQL的恶意攻击行为机会。为日后安全检查提供更多线索和证据。
 
 - 检查方法 
- SHOW variables LIKE 'log_error';
 - 如果返回是空否,则存在安全问题需要修复
 
 - 修复建议 
- 打开MySQL配置文件把log_error配置到一个有效路径
 
 
5.2. 确保日志文件在非系统分区
- 建议理由 
- 操作系统上有明确的系统分区和非系统分区。如果日志文件在系统分区,会提高整个系统因为磁盘空间用尽发生拒绝服务的几率。
 
 - 检查方法 
- 进入数据库执行下列语句 
- SELECT @@global.log_bin_basename;
 
 - df –h <上面的地址返回值> 如果发现结果中存在/ /var /usr 说明数据文件在系统分区建议换区
 
 - 进入数据库执行下列语句 
 - 修复建议:打开MySQL配置文件 
- 将log_bin设置成非系统分区路径
 
 
5.3. 确保log_raw被设置成off
- 建议理由 
- 语句中的密码在写入一般查询日志时会被服务器重写,不会以明文方式记录。但如果log-raw被设置成ture,则会记成明文。
 
 - 检查方法 
- 打开数据库配置文件
 - 确定log_raw被设置成off
 - 如果是off是安全的,但如果是on则需要修复
 
 - 修复建议:打开MySQL配置文件 
- log_raw = OFF
 
 
5.4. 确保log_warnings被设置成2
- 建议理由 
- log_warnings适用于决定日志中记录的内容的。默认是1随着级别的调整会记录更多信息。调整到2有助于通过日志追查安全问题。
 
 - 检查方法 
- 通过sql读取信息 
- SHOW GLOBAL VARIABLES LIKE 'log_warnings';
 
 - 如果返回值是1需要调整到2
 
 - 通过sql读取信息 
 - 修复建议:打开MySQL配置文件 
- log_warnings = 2
 
 
6. 身份认证安全配置
6.1. 确保密码不在全局变量中
- 建议理由 
- MySQL配置文件(客户端部分)允许设置用户名和密码。使用密码参数可能会对用户的机密性造成负面影响。
 
 - 检查方法 
- 打开数据库配置文件
 - 检查用户名和密码参数
 - 如果是空的是安全的,但如果不是空的则需要修复
 
 - 修复建议:打开MySQL配置文件 
- 清理参数内容
 
 
6.2. 确保sql_mode中含有NO_AUTO_CREATE_USER
- 建议理由 
- NO_AUTO_CREATE_USER是sql_mode的一个选项,可以阻止grant语句在特定情况下自动创建用户。给数据库带来安全隐患。
 
 - 检查方法 
- SELECT @@session.sql_mode;
 - 如果返回值包含NO_AUTO_CREATE_USER是安全的,但如果不包含则需要修复
 
 - 修复建议:打开MySQL配置文件 
- 在sql_mode 中添加参数NO_AUTO_CREATE_USER
 
 
6.3. 确保没有用户使用空密码
- 建议理由 
- 如果密码被设置成空密码,入侵者只要知道密码和主机允许列表,就可以绕过身份验证随意登录数据库。进行违规操作。
 
 - 检查方法 
- SELECT User,host FROM MySQL.user WHERE authentication_string='';
 - 没有行数返回说明安全,否则需要配置
 
 - 修复建议:给空白密码的账号配上密码 
- SET PASSWORD FOR @'' = ''<user>@;<host>’ = ‘<clear password>’
 
 
6.4. 确保default_password_lifetimes少于或等于90天
- 建议理由 
- 密码需要定期更换,才有意义,也才能更有效的防止黑客破解。
 
 - 检查方法 
- SHOW VARIABLES LIKE 'default_password_lifetime';
 - 看返回值和90的关系如果大于90就需要修复
 
 - 修复建议:设置全局变量 
- SET GLOBAL default_password_lifetime=90
 
 
6.5. 确保用户不允许所有ip访问
- 建议理由 
- 某一数据库用户支持所有ip访问,一旦账号密码泄露,数据库就变得很不安全。
 
 - 检查方法 
- SELECT user, host FROM MySQL.user WHERE host = '%';
 - 结果集为空说明不存在问题,否则需要修复
 
 - 修复建议 
- 删除该用户会或通过alter删除 %,指定特定ip
 
 
6.6. 确保无匿名帐户存在
- 建议理由 
- 匿名用户是空的,也没有密码。安全性很差,任意人员都可以利用匿名用户访问数据库。
 
 - 检查方法 
- SELECT user,host FROM MySQL.user WHERE user = '';
 - 结果集为空说明不存在问题,否则需要修复
 
 - 修复建议:删除匿名用户。
 
7. 网络安全配置
7.1. 确保have_ssl设置成yes
- 建议理由 
- 所有网络请求必须走SSL/TLS访问数据库。杜绝网络劫持和网络拦截
 
 - 检查方法 
- SHOW variables WHERE variable_name = 'have_ssl';
 - 返回yes不存在问题,否则需要修复
 
 - 修复建议:开启ssh。
 
7.2. 确保ssl_type是 'ANY', 'X509', or 'SPECIFIED'
- 建议理由 
- 所有网络请求必须走SSL/TLS访问数据库。SSL提供多种算法,其中一些算法安全性并不高不能帮助用户杜绝网络劫持和网络拦截。建议设置ssl_type为高安全类型的加密算法。但这其中有一个隐患,如果客户端使用较低加密算法,会由于算法无法匹配导致链接失败。
 
 - 检查方法 
- SELECT user, host, ssl_type FROM MySQL.user WHERE NOT HOST IN ('::1', '127.0.0.1', 'localhost');
 - 确保每个用户返回的ssl_type等于ANY, X509, or SPECIFIED
 
 - 修复建议:使用GRANT语句来使用要求的SSL 
- GRANT USAGE ON *.* TO 'my_user'@'app1.example.com' REQUIRE SSL;
 
 
8. 复制数据传输中的安全配置
8.1. 确保MASTER_SSL_VERIFY_SERVER_CERT设置成yes或1
- 建议理由 
- 在使用SSL时,证书验证对于验证正在进行连接的一方很重要。 在这种情况下,从属(客户端)应该在继续连接之前验证主服务器的证书以验证主服务器。MASTER_SSL_VERIFY_SERVER_CERT主要是用于检查证书,确保证书的合法性。
 
 - 检查方法 
- select ssl_verify_server_cert from MySQL.slave_master_info;
 - ssl_verify_server_cert返回是1,否则需要修复
 
 - 修复建议:修改MASTER_SSL_VERIFY_SERVER_CERT配置。 
- STOP SLAVE;
 - CHANGE MASTER TO MASTER_SSL_VERIFY_SERVER_CERT=1;
 - START SLAVE;
 
 
8.2. 确保master_info_repository设置成table
- 建议理由 
- master_info_repository设置成table.客户端使用的密码存储在表中。相较于文件系统表中更为安全。
 
 - 检查方法 
- SHOW GLOBAL VARIABLES LIKE 'master_info_repository';
 - master_info_repository返回是table,否则需要修复
 
 - 修复建议:打开配置文件 
- master_info_repository=TABLE
 
 
相关文章:
mysql安全加固配置文档(完结)
4. MySQL 权限安全配置 4.1. 确保只有管理员账号有所有数据库的访问权限 建议理由 除了管理员账号,其他用户没必要有所有数据库的访问权限。过高的权限会导致安全问题。检查方法 SELECT user, host FROM MySQL.user WHERE (Select_priv Y) OR (Insert_priv Y) …...
CAPL函数在实现AES加密算法时遇到的各种问题(c++中符号的含义,AES算法中padding的问题等)
本来打算把AES算法的代码移植到CAPL中的,文章:https://blog.csdn.net/qq_28205153/article/details/55798628?spm=1001.2014.3001.5506里有非常详细的代码。但是一来太麻烦,二来没必要,因为CAPL提供了Security安全相关的函数: 这里面就提供了AES加密算法的接口函数,使用…...
二叉排序树(二叉查找树)基本操作_20230417
二叉排序树(二叉查找树)基本操作_20230417 前言 二叉排序树首先是一颗二叉树,它不同于常规二叉树的地方在于,如果左子树不为空,那么左子树上所有结点的值都不大于根节点的值,如果右子树不为空,…...
实现服务器版本的表白墙
目录 初始前端代码 网页初始效果 一、确定接口 二、编写代码 2.1 创建项目七步走 1、创建Maven项目 2、引入依赖 3、构建目录 4、编写代码 5、打包、部署 编辑 7、验证代码 三、具体的代码逻辑 3.1 服务器——两个服务接口 3.2 前端页面的代码 3.2.1 前端存档…...
TensorFlow 2 和 Keras 高级深度学习:6~10
原文:Advanced Deep Learning with TensorFlow 2 and Keras 协议:CC BY-NC-SA 4.0 译者:飞龙 本文来自【ApacheCN 深度学习 译文集】,采用译后编辑(MTPE)流程来尽可能提升效率。 不要担心自己的形象&#x…...
unity,制作一个环状滑动条
介绍 unity,制作一个环状滑动条 方法 1.导入png图片素材2.新建一个滑动条,两者图片都设置为图片3.调节slider的参数4.调节backgroud的参数5.fill area、fill的参数同上。 得到两个叠加的圆环。6.设置fill的背景颜色为红色7.设置fill填充方式࿰…...
2023-04-17 算法面试中常见的树和递归问题
二叉树和递归 0 LeetCode297 二叉树的序列化和反序列化 序列化是将一个数据结构或者对象转换为连续的比特位的操作,进而可以将转换后的数据存储在一个文件或者内存中,同时也可以通过网络传输到另一个计算机环境,采取相反方式重构得到原数据…...
3分钟通过日志定位bug,这个技能测试人必须会
♥ 前 言 软件开发中通过日志记录程序的运行情况是一个开发的好习惯,对于错误排查和系统运维都有很大帮助。 Python 标准库自带了强大的 logging 日志模块,在各种 python 模块中得到广泛应用。 一、简单使用 1. 入门小案例 import logging logging.ba…...
【论文总结】V-Shuttle:可扩展和语义感知的 Hypervisor 虚拟设备模糊测试
介绍 这是来自2021 CCS的一篇论文,作者有GaoningPan, Xingwei Lin, Xuhong Zhang, Yongkang Jia, Shouling Ji, Chunming Wu, Xinlei Ying, Jiashui Wang, Yanjun Wu。该论文提出V-shuttle的新框架来执行管控程序的模糊测试,该框架执行可扩展和语义感知…...
一篇文章让你搞懂TypeScript中的typeof()、keyof()是什么意思
TypeScript中的typeof()、keyof()是什么意思? 知识回调(不懂就看这儿!)场景复现核心干货👇👇👇举例引入字面量类型(literal types&…...
【机会约束、鲁棒优化】机会约束和鲁棒优化研究优化【ccDCOPF】研究(Matlab代码实现)
💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…...
4月想跳槽的同学,没有更好的选择,可以去美团
在美团干了半年,说一下自己的感受,美团是一家福利中等,工资待遇中上,高层管理团队强大,加班强度一般,技术不错,办公环境一般,工作氛围中上,部门差距之间工作体验差距巨大…...
从输入url到页面展现(一)从浏览器解析url开始
前端面试有一道很考验人的问题,那就是:请你说一下从用户从输入url到页面展现的过程是怎样的?在接下来的一段时间呢,狗哥会从这一问题出发,开始剖析这个过程,希望可以让更多的小伙伴掌握到这个过程ÿ…...
购物 · 礼物
标题 前言必学场景词汇及用法书店花店玩具店讨价还价情境常用单词书店花店玩具店前言 加油 必学场景词汇及用法 书店 1.book store / book shop 书店 I browsed through the book store, but I didn’t find the book I was looking for. 我把书店里的书浏览了一番,但是没…...
可视化图表API格式要求有哪些?Sugar BI详细代码示例(2)
Sugar BI中的每个图表可以对应一个数据 API,用户浏览报表时,选定一定的过滤条件,点击「查询」按钮将会通过 API 拉取相应的数据;前面说过,为了确保用户数据的安全性,Sugar BI上的所有数据请求都在Sugar BI的…...
153. 寻找旋转排序数组中的最小值
已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,2,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,1,2] 若旋转 7 次࿰…...
Linux 文件描述符
Linux 文件描述符 Linux 中一切皆文件,比如 C 源文件、视频文件、Shell脚本、可执行文件等,就连键盘、显示器、鼠标等硬件设备也都是文件。 一个 Linux 进程可以打开成百上千个文件,为了表示和区分已经打开的文件,Linux 会给每个…...
第17章_反射机制
第17章_反射机制 讲师:尚硅谷-宋红康(江湖人称:康师傅) 官网:http://www.atguigu.com 本章专题与脉络 1. 反射(Reflection)的概念 1.1 反射的出现背景 Java程序中,所有的对象都有两种类型:编…...
使用VBA小程序提高资产清查效率
资产清查是一件相当烦人的工作,去年使用LayUIPHPMS SQL Server 2014写了一个资产清查的程序,可惜写完了,LayUI已经停止更新了,就没有再完善下去,数据也没有更新,等于就废了。 今年又要进行资产清查…...
JavaSE学习进阶day07_02 异常
第三章 异常 3.1 异常概念 异常,就是不正常的意思。在生活中:医生说,你的身体某个部位有异常,该部位和正常相比有点不同,该部位的功能将受影响.在程序中的意思就是: 异常 :指的是程序在执行过程中,出现的非正常的情况࿰…...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
AspectJ 在 Android 中的完整使用指南
一、环境配置(Gradle 7.0 适配) 1. 项目级 build.gradle // 注意:沪江插件已停更,推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
【Go语言基础【13】】函数、闭包、方法
文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数(函数作为参数、返回值) 三、匿名函数与闭包1. 匿名函数(Lambda函…...
MySQL 部分重点知识篇
一、数据库对象 1. 主键 定义 :主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 :确保数据的完整性,便于数据的查询和管理。 示例 :在学生信息表中,学号可以作为主键ÿ…...
Leetcode33( 搜索旋转排序数组)
题目表述 整数数组 nums 按升序排列,数组中的值 互不相同 。 在传递给函数之前,nums 在预先未知的某个下标 k(0 < k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...
