MySQL网络安全容灾备份

news/2024/7/6 20:30:34/文章来源:https://www.cnblogs.com/rcsy/p/18282773
网络安全主要三个方面。一般云厂商都提供网络相关的安全:白名单、私有网络、SSL加密等。
 
网络:
  MySQL服务器与客户端连接安全 SSL(TLS)加密传输。
  账户使用较弱的密码或不使用密码,账号安全。valited_password。
  账号权限,最小化原则。
  网络访问控制,云厂商使用白名单,私有网络隔离。自建主要涉及防火墙,网络隔离。禁止内网里面进行公网IP私用。
 
操作系统
  服务器存在额外的账户会增加MySQL的脆弱性。
  账号密码安全。
  防火墙。
 
文件系统
  文件夹、数据文件、日志文件可以被其他用户访问
 
 
防火墙:指定配置的IP和端口进行访问。一般设置为办公场地固定IP,端口改为非默认端口。设定访问频率和协议。
网络隔离:就算是内网访问,也可以进行网络分区,普通网络无法直接访问数据库。需要单独配置访问策略。
SSL加密。一般MySQL本身支持。同时很多时候都有代理,需要代理支持常见的SSL。
 
 
数据库:
1. 数据库版本及运行要求
  使用稳定的解决了已知漏洞的版本,如5.7.20,8.0.2等。
  my.cnf配置 --skip-symbolic-links选项启动数据库:禁止在创建索引和创建表的时候,将索引文件和数据文件链接到其他文件。
 
2. 通用加固项
  删除冗余数据库, 如test。drop database if exists ${dbname};
  清除无用用户(没有用户名的用户)。 drop user ''
  修改超级用户的密码。 ALTER USER 'root'@'localhost' IDENTIFIED WITH sha256_password BY 'pwd';
  配置密码复杂度,使用validate_password.so插件。
  以上可以使用mysql_secure_installation 来完成。
 
3. 用户权限
实际应用中,有修改mysql.user的用户都算超级用户,都禁止远程连接数据库。
避免以管理员用户创建存储过程和函数。
 
以下权限属于高级权限,避免授权给普通用户。
  All/All Privileges权限代表全局或者全数据库对象级别的所有权限,不包括with option以及proxy权限。
  Alter 权限代表允许修改表结构的权限。
  Alter routine 权限代表允许修改或者删除存储过程、函数的权限
  create 权限代表允许创建新的数据库和表的权限
  Create routine权限代表允许创建存储过程、函数的权限
  Create tablespace权限代表允许创建、修改、删除表空间和日志组的权限
  Create temporary tables 权限代表允许创建临时表的权限
  Create user权限代表允许创建、修改、删除、重命名user的权限
  Drop权限代表允许删除数据库、表、视图的权限,包括truncate table命令
  Event权限代表允许查询,创建,修改,删除MySQL事件
  Execute权限代表允许执行存储过程和函数的权限
  File权限代表允许在MySQL可以访问的目录进行读写磁盘文件操作,可使用的命令包括load data infile,select … into outfile,load file()函数
  Grant option权限代表是否允许此用户授权或者收回给其他用户你给予的权限,重新付给管理员的时候需要加上这个权限
  Index权限代表是否允许创建和删除索引
  Lock权限代表允许对拥有select权限的表进行锁定,以防止其他链接对此表的读或写。
  Process权限代表允许查看MySQL中的进程信息,比如执行show processlist, mysqladmin processlist, show engine等命令
  Reference权限是在5.7.6版本之后引入,代表是否允许创建外键。
  Reload权限代表允许执行flush命令,指明重新加载权限表到系统内存中,refresh命令代表关闭和重新开启日志文件并刷新所有的表
  Replication client权限代表允许执行show master status,show slave status,show binary logs命令
  Replication slave权限代表允许slave主机通过此用户连接master以便建立主从复制关系。
  Show databases权限代表通过执行show databases命令查看所有的数据库名
  Shutdown权限代表允许关闭数据库实例,执行语句包括mysqladmin shutdown
  Super权限代表允许执行一系列数据库管理命令,包括kill强制关闭某个连接命令, change master to创建复制关系命令,以及create/alter/drop server等命令
  Trigger权限代表允许创建,删除,执行,显示触发器的权限
 
普通权限:
  Insert权限代表是否允许在表里插入数据,同时在执行analyze table,optimize table,repair table语句的时候也需要insert权限
  Update权限代表允许修改表中的数据的权限
  Select权限代表允许从表中查看数据,某些不查询表数据的select执行则不需要此权限,如Select 1+1, Select PI()+2;而且select权限在执行update/delete语句中含有where条件的情况下也是需要的
  Delete权限代表允许删除行数据的权限
  Create view权限代表允许创建视图的权限
  Show view权限代表通过执行show create view命令查看视图创建的语句
  Usage权限是创建一个用户之后的默认权限,其本身代表连接登录权限
 
 
更改MySQL root用户的名字
  update mysql.user set user='<your_account>' where user='root'
  flush privileges
 
4. 连接设置
  监听地址不允许包含*,0.0.0.0,::     [mysqld] bind-address=<’ServerIP’>
  用户主机名不使用通配符%
  超级管理员只能本地登录
  更改MySQL默认监听3306端口
 
如果数据库不允许网络连接,仅支持本地通过socket连接。可以my.cnf中配置:
  skip-networking
  或者强制只监听本机:bind-address=127.0.0.1
 
禁用LOCAL INFILE命令,可以my.cnf中配置
  set-variable=local-infile=0
 
 
限制数据库连接闲置等待时间
[mysqld] wait_timeout、interactive_timeout、slave-net-timeout
 
MySQL 5.7.17 以后提供了Connection-Control插件用来控制客户端在登录操作连续失败一定次数后的响应的延迟。该插件可有效的防止客户端暴力登录的风险(攻击),修改my.cnf配置文件:
plugin-load-add="connection_control.so"
connection-control=FORCE_PLUS_PERMANENT
connection-control-failed-login-attempts=FORCE_PLUS_PERMANENT
connection-control-failed-connections-threshold=3
connection-control-min-connection-delay=1000
connection-control-max-connection-delay=2147483647
 
 
 
5. ssl安全认证
确保对所有远端用户均需要使用SSL连接
GRANT USAGE ON *.* TO <my_user>@<host> REQUIRE SSL;
 
 
5.2确保 secure_file_priv 不是空:
secure_file_priv 限制客户端可以读取数据文件的路径,secure_file_priv设置合理的值可以有效降低 sql 注入后黑客读取数据库数据的可能性。SHOW VARIABLES like '%secure_file_priv%'
 
5.3复制安全
MASTER_SSL_VERIFY_SERVER_CERT指示从属设备是否应该验证主服务器的证书。此配置项可以设置为“是”或“否”,除非在从节点上启用了SSL,否则将忽略该值。 在mysql.slave_master_info表中
 
确保 master_info_repository 设置成 table,相对更安全。
 
 
6. 操作系统相关配置
 
6.1 禁止数据库启动用户交互式登录
    /etc/passwd文件,在mysql用户对应行添加/sbin/nologin或/bin/false.
    usermod -s /sbin/nologin mysql
 
6.2 文件权限
1. 禁止mysql_history文件记录信息
    rm <your_path>/.mysql_history 
    ln -s /dev/null <your_path>/.mysql_history
    sed -i '$a readonly MYSQL_HISTFILE=/dev/null' /etc/profile
 
2. 限制安装文件属主和权限
    MySQL安装目录和文件属主要求为MySQL运行用户,目录权限要求为700,二进制文件为500,库文件为500,启动文件(一般位于/etc/init.d目录下)为500。
 
3. 限制数据库数据文件属主和权限
    数据目录和文件属主为mysql用户,数据目录为700,数据文件为600。
    chmod 700 <data_dir Value>
    chown -R mysql:mysql <data_dir Value>
    chmod 600 <data_dir Value>/*
 
4. 限制日志文件(含binlog)属主(mysql)和权限(600)
    MySQL数据库中常见日志文件有:
    -  **错误日志**(log_error):
            记录了MySQL的启停和运行过程。  log_error=/opt/mysql/data/aaa.err'
            
    -  **二进制日志**(log_bin):
            记录了对数据库执行更改的所有操作。作用:数据恢复、复制、日志审计(如判断有无注入攻击)。
            备注:bin_log.00001即是二进制日志,bin_log.index为索引文件。二进制日志可使用自带的**mysqlbinlog**工具查看。
 
    -  慢查询日志(slow_query_log_file):
            记录运行慢的sql,帮助进行sql优化。
            slow_query_log=1                     # 默认关闭,1启用,0禁用     [log_slow_queries]
            slow_query_log_file=slow.log    # 指定文件路径和名字;默认值是'主机名-slow.log',位于datadir目录  
            long_query_time=3                   # 执行时间超过设置阈值(s)的sql语句会被记录在slow_query_log_file中
            log_output=FILE,TABLE           # 指定慢查询的输出方式,动态参数。 FILE:慢查询日志;TABLE:mysql.slow_log表
            Tips: 可以借助**mysqldumpslow**命令帮助分析慢查询日志。
 
    -  查询日志(general_log_file)
            记录了所有对数据库请求的信息。
            general_log=1          # 默认关闭,配置此参数开启查询日志。
            general_log_file=/opt/mysql/data/general.log  
 
            mysql>set global general_log_file='/tmp/general.log';
            mysql>set global general_log=on;  
            mysql>set global general_log=off;  
            与slow_log一样,可以将查询日志放入mysql.general_log表中。
 
5. 限制my.cnf文件属主和权限
    chmod 600 /xxx/my.cnf
    chown mysql:mysql /xxx/my.cnf  
 
6. 限制Plugin目录及其文件权限
    show variables where variable_name = 'plugin_dir';
 
    chmod 500 <plugin_dir Value>
    chown -R mysql:mysql <plugin_dir Value>
    chmod 400 <plugin_dir Value>/*    
 
7. 限制SSLfile文件权限
    数据库运行用户,权限是否为400。
    show variables like 'ssl%';
 
8、chroot
  Unix操作系统中的chroot可以改变当前正在运行的进程及其子进程的root目录。重新获得另一个目录root权限的程序无法访问或命名此目录之外的文件。
 
9、mysql脚本安全mysql_config_editor
 
  mysql_config_editor set --login-path=local --host=localhost --user=db_user --password
  多实例:
  mysql_config_editor set --login-path=local3306 --host=localhost --user=db_user --socket="/tmp/mysql.sock" --password
 
  用户/密码将被保存在你的密码中。home/system_username/.mylogin.cnf  加密了的。看不到密码。
  使用方法;
  mysql --login-path=local  -e "statement"
  删除:
  mysql_config_editor remove --login-path=local3306
  输出:
  mysql_config_editor print --login-path=local3306
  修改:
  mysql_config_editor reset --login-path=local3306 --host=localhost --user=db_user --socket="/tmp/mysql.sock" --password
 
 
 
7、程序相关
  防止SQL注入攻击:SQL注入攻击是最常见和最具破坏力的MySQL攻击之一。
  GreenSQL,具有数据库防火墙(Database Firewall)、数据库入侵检测系统(Database IDS),甚至数据库的入侵防御(Database IPS)、数据库虚拟补丁(Virtual Patching)的特性。已全面支持MS SQL、MySQL、PostgreSQL。
 
  *访问敏感表(用户,帐户,信用卡信息)
  *一个空密码字符串
  *一个'或'查询标记内
  *SQL表达式,它总是返回true(同义反复的SQL)
 
 
==========================  备份 恢复 =====================
 
容灾:同城容灾(多可用区实例)、异地容灾(两地多中心)。
 
1、使用高可用或集群架构,基于MGR。
2、可以让备节点处于其他可用区,或者机房。
3、可以进行异地容灾备份,备份数据。脚本定时任务自动备份。
4、备份方式,快照备份,物理备份xtrabackup,逻辑备份mysqldump,mysqlpump等,binlog备份多种备份结合。在slave上备份。
 
binlog备份。(备份恢复目录)
 
 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[大疆航线] 系列(3) 无人机多角度航线规划软件μMAPLE

关键词:无人机航线、航点动作,航线软件 作者:ludwig1860 日期:2024.7.3 1. 多角度航线规划软件μMAPLE的编写 我们研究团队编写了一个名为μMAPLE (uav-based Multi-Angular flight PLannEr)的多角度航线规划软件。当然,我们也很乐意协助研究人员们开发符合各自需求的航线…

Windows Terminal 中设置常用命令的别名

Windows Terminal 中设置常用命令的别名 ‍ E:\zhpj\Desktop>cmd /? 启动 Windows 命令解释器的一个新实例 . . . 如果 /D 未在命令行上被指定,当 CMD.EXE 开始时,它会寻找 以下 REG_SZ/REG_EXPAND_SZ 注册表变量。如果其中一个或 两个都存在,这两个变量会先被执行。HKE…

ssrf结合python反序列化

存储session对象时 当然不能直接存储对象 需要转换成有规律的字符串 这一过程就涉及到了序列化 将对象转换成字符串这一过程称之为序列化 PYTHON反序列化漏洞 本文中就涉及到了pickle这一序列化模块导致的反序列化漏洞 在反序列化结束时 会触发__reduce__魔术方法 类似于php中的…

Web基础知识扫盲

1、中间件 定义:中间件是一种独立的系统软件服务程序,分布式应用软件借助这种软件在不同的技术之间共享资源,中间件位于客户机服务器的操作系统之上,管理计算资源和网络通信。常见的中间件:IIS、Apache、Nginx、Tomcat 2、NAT网络地址转换 这里只介绍动态转换一种 动态转换…

MySQL-16.MVCC(多版本并发控制)

C-16.多版本并发控制 1.什么是MVCCMVCC(Multiversion Concurrency Control),多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一事务更…

[JLU] 数据结构与算法上机题解思路分享-课程设计第一次与第二次上机

这是吉林等通知大学数据结构与算法上机题的题解思路,没有精妙的解法,只是一个记录罢前言 首先,请务必自己尽全力尝试实现题目,直接看成品代码,思维就被拘束了,也很容易被查重。 这里只是思路解析的博客,代码仓库在 JLU_Data_Structures_Record 希望你能在这里找到你想要…

【Python】GUI开发笔记

一、环境搭建: 1、Pycharm开发工具pycharm历史版本 https://www.jetbrains.com/pycharm/download/other.html破解插件 https://blog.csdn.net/weixin_50737119/article/details/135628513 2、PYENV 版本管理 Python也有对应的版本管理工具,叫pyenv 这个东西挺奇怪的,直接发…

Day1| 704. 二分查找 27. 移除元素

704.二分查找 题目链接 : https://leetcode.cn/problems/binary-search/description/ 思路😗*切记二分查找要基于排序好的数组或者数据,否则二分查找必不能使用!!!!!!!!! ** 双指针写最简单,一个头指针从0开始,一个尾指针从数组长度-1开始,中间指针是头+尾/2,每次比较头尾中间…

不同操作系统下的换行符

1. 关键字 2. 换行符的比较 3. ASCII码 4. 修改换行符4.1. VSCode5. 参考文档1. 关键字 CR LF CRLF 换行符 2. 换行符的比较英文全称 英文缩写 中文含义 转义字符 ASCII码值 操作系统Carriage Return CR 回车 \r 13 MacIntosh(早期的Mac)Linefeed LF 换行/新行 \n 10 Unix/Li…

1s内控制向某个请求请求的次数

背景 有的时候后端提供的接口对相同的IP进行限制,在某个时间内不能发送超过X条的请求,一旦超过指定的请求数会导致后续请求接口会出现异常。 效果需求 比如:在1s内最多同时发送2个请求,多出来的请求在后续的1s或者后续的Ns中发起 代码 <template><div class="…

电脑hold escape key to prevent startlsback怎么处理?

电脑出现hold escape key to prevent StartlsBack from,一般遇到这种问题之后,一直按住ESC键就没有了。但是还需彻底的解决掉这个问题。 首先我们按下“ctrl +alt +del”组合键打开任务管理器,左上角“运行新任务”,输入“control”并确定,就可以打开控制面板,查看方式为…

7.3日RTOS自学心得

我现在用的单片机主要是裸机系统,轮询系统和前后台系统(中断处理),但是为了以后的职业发展肯定还是要学习下操作系统的,也就是多任务系统FreeRTOS,在看野火的资料【[野火]uCOS-III 内核实现与应用开发实战指南】,学习到了第六章,任务的定义与任务切换的实现。 总结如下…

fisher线性判别分析和多分类问题探究

本文继续来讨论另一种分类模型————fisher线性判别分析 目录一、模型思想二、SPSS的实现1.参数设置(1)定义范围(2) 统计(3)保存与分类2.结果分析(1)典则判别函数系数(2)分类结果(3)分类函数系数(4)保存预测结果四、多分类问题 一、模型思想 我们以二分类问题举例…

[Paper Reading] GAIA-1: A Generative World Model for Autonomous Driving

GAIA-1: A Generative World Model for Autonomous Driving GAIA-1 时间:23.09 机构:Wayve TL;DR 本文介绍一种生成世界模型,该模型利用视频、文本和动作输入来生成逼真的驾驶场景,同时提供对自身车辆行为和场景特征的细粒度控制。 Method模型输入 训练过程输入video/text(…

进度报告1

(1)1.在黑马程序员中找到java的教学网课,初步学习了Java语言的概述以及完成了java的开发环境搭建,成功安装了jdk并且利用命令行窗口顺利验证java和javac是否正常安装并且能使用。2.编写入门代码helloworld代码:public class HelloWorld{ public static void main(String[]…

模拟集成电路设计系列博客——8.4.2 时间-数字转换器

8.4.2 时间-数字转换器 在上一节我们介绍了TDC的一种典型实现,即单延时链TDC,通过\(2^N\)的延迟单元和D触发器可以实现N bit的时间数字转换功能,但这种结构的分辨率受到延迟单元的最小延迟时间限制,即: \[LSB=\tau_{delay}=\frac{T}{2^N} \tag{8.4.10} \]其中\(T\)为TDC的…

聊一聊领域驱动与贫血模型

写在前面 前段时间跟领导讨论技术债概念时不可避免地提到了代码的质量,而影响代码质量的因素向来都不是单一的,诸如项目因素、管理因素、技术选型、人员素质等等,因为是技术债务,自然就从技术角度来分析,单纯从技术角度来看代码质量,其实又细分很多原因,如代码设计、代码…

《智能计算系统》第五章 编程框架原理(上)课程笔记

《智能计算系统》第五章 编程框架原理(上)课程视频链接:https://www.bilibili.com/video/BV1Ei421i7Rg 本文源自于B站国科大计算所 智能计算系统课程官方账号 所公开上传的视频,在原有视频之上,提取了关键帧、将音频转成了文字并进行了校正,以便学习使用。在此,也感谢国…

点云分割网络---Point Transformer V2

PDF: 《Point Transformer V2: Grouped Vector Attention and Partition-based Pooling》 CODE: https://github.com/Gofinge/PointTransformerV2 一、大体内容 前面一篇文章介绍了Point Transformer,这一篇在其基础上进行改进,提出了强大且高效的Point Transformer V2模型,…

【坚果识别】果实识别+图像识别系统+Python+计算机课设+人工智能课设+卷积算法

一、介绍 坚果识别系统,使用Python语言进行开发,通过TensorFlow搭建卷积神经网络算法模型,对10种坚果果实(杏仁, 巴西坚果, 腰果, 椰子, 榛子, 夏威夷果, 山核桃, 松子, 开心果, 核桃)等图片数据集进行训练,得到一个识别精度较高的模型文件,让后使用Django搭建Web网页端…