首页 > 数据库 >MySQL网络安全&容灾备份

MySQL网络安全&容灾备份

时间:2024-07-03 23:52:26浏览次数:14  
标签:网络安全 log -- 数据库 mysql 容灾 MySQL 权限

网络安全主要三个方面。一般云厂商都提供网络相关的安全:白名单、私有网络、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备份。(备份恢复目录)    

标签:网络安全,log,--,数据库,mysql,容灾,MySQL,权限
From: https://www.cnblogs.com/rcsy/p/18282773

相关文章

  • 网络安全怎么学习才好呢?
    搞网络安全的话,建议不要学那些乱七八糟的东西。建议:1、通信协议,包括7层协议,得搞清楚那个数据块做什么用,那个位做什么用,这点很重要李鬼可以冒充李逵。2、目前常用操作系统,建议从linux入手,都破门而入了,就不必要在乎钥匙不钥匙3、熟悉一两个开源服务程序比如apachehttp,ng......
  • MySQL-表级锁(表锁、元数据锁、意向锁)
    文章目录1、表级锁介绍1.1、对于表级锁,主要分为以下三类:2、表锁2.1、对于表锁,分为两类:2.2、共享读锁2.2.1、创建表score2.3、独占写锁3、元数据锁3.1、查看数据库中的元数据锁的情况4、意向锁4.1、假如没有意向锁4.2、有了意向锁之后4.3、查看意向锁及行锁的加锁情......
  • MySQL-16.MVCC(多版本并发控制)
    C-16.多版本并发控制1.什么是MVCCMVCC(MultiversionConcurrencyControl),多版本并发控制。顾名思义,MVCC是通过数据行的多个版本管理来实现数据库的并发控制。这项技术使得在InnoDB的事务隔离级别下执行一致性读操作有了保证。换言之,就是为了查询一些正在被另一事务更新的行,并且......
  • MySQL在本机环境安装过程及问题解决
    最近在我的Windows10电脑上搭建MySQL数据库环境,没想到居然遇到了不少问题,特记录下来,希望给大家帮助,少走弯路。下载MySQLCommunityServer https://dev.mysql.com/downloads/mysql/ MySQLCommunityServeristheworld'smostpopularopensourcedatabase.这个社区......
  • mysql的备份与恢复
    一、备份1.数据备份的必要性备份的主要目的是灾难恢复在生产环境中,数据的安全性至关重要任何数据的丢失都可能产生严重的后果造成数据丢失的原因程序错误人为操作错误运算错误磁盘故障灾难(如火灾、地震)和盗窃2.数据备份分类物理备份对数据库操作系统的物理文件(如数据文......
  • MySQL索引事务
    开启学习之旅吧!活到老~学到老!文章目录目录文章目录前言一、索引1.查看索引2.创建索引3.删除索引3.索引实例二、事务1.事务的概念2.事务的使用前言本篇内容主要介绍MySQL的索引与事务,并附上实例以便大家更容易理解。一、索引索引是一种特殊的文件,包含着对......
  • windows的桌面docker安装mysql5.7
    dockerrun-p3306:3306--namemysql^-vE:/mysql/data:/var/lib/mysql^-vE:/mysql/conf:/etc/mysql/conf.d^-vE:/mysql/log:/var/log/mysql^-eMYSQL_ROOT_PASSWORD=123456^-dmysql:5.7命令解析:dockerrun-p3306:3306--namemysql:创建一个docker容......
  • 小白也能懂的Mysql数据库索引详解
    核心概念主键索引/二级索引聚簇索引/非聚簇索引回表/索引覆盖索引下推联合索引/最左联合匹配前缀索引explain一、[索引定义]1.索引定义在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现......
  • 什么是 MySQL 锁等待?
    本文基于MySQL8.0.32源码,存储引擎为InnoDB。先排队不管是加表锁,还是加行锁,如果不能立即获得锁,加锁事务都需要进入锁等待状态。事务进入锁等待状态,需要用锁结构来排队。和立即获得锁时的锁结构一样,这个锁结构的各属性都已经初始化完成。不同之处在于,它被设置为等待状态。......
  • ETL数据集成丨使用ETLCloud实现MySQL与Greenplum数据同步
    我们在进行数据集成时,MySQL和Greenplum是比较常见的两个数据库,我们可以通过ETLCloud数据集成平台,可以快速实现MySQL数据库与数仓数据库(Greenplum)的数据同步。MySQL数据库:优点:轻量级与高性能:MySQL体积小、启动快,对资源消耗相对较低,适合处理高并发的OLTP(在线事务处理)场景。开源......