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