提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 实验准备
- 1.实验环境
- 2.下载安装MySQL
- 一、数据库主从配置
- 1.概念
- 2.配置内容
- 二、数据库备份
- 三、数据库恢复
- 四、数据库安全策略设置
- 1.修改root用户的密码
- 2.开启General Log:
- 五、数据库安全审计
- 1.配置日志功能:
- 2.禁用LOCAL INFILE
- 六、数据库安全基线检查
- 1.删除'test'数据库 | 服务配置
- 2.禁用symbolic-links选项 | 服务配置
- 3.确保配置了log-error选项 | 安全审计
实验准备
1.实验环境
①Ubantu 16.04
②MySQL 5.7
2.下载安装MySQL
①更新软件源并下载安装mysql:
$ sudo apt-get update #更新软件源
$ sudo apt-get install mysql-server #安装mysql
②安装过程会提示设置mysql root用户的密码,设置完成后等待自动安装即可:
③默认安装完成就启动了mysql,确认是否启动成功,mysql节点处于LISTEN状态表示启动成功:
$ sudo netstat -tap | grep mysql
一、数据库主从配置
1.概念
①数据库主从配置:
又叫做主从分离或读写分离,简言之就是将数据库集群,使其中少量数据库用来写、大量数据库用来读,以此来解决web应用系统、数据库出现的性能瓶颈(性能瓶颈主要指:一个系统中数据库的查询操作比更新操作要多得多,通过多台查询服务器将数据库的查询分担到不同的查询服务器上从而提高查询效率)。
②Mysql数据库:
支持数据库的主从复制功能,使用主数据库进行数据的插入、删除与更新操作,而从数据库则专门用来进行数据查询操作,这样可以将更新操作和查询操作分担到不同的数据库上,从而提高了查询效率。
③原理如图:
(1) Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制日志事件(binary log events);
(2) Slave通过I/O线程读取Master中的binary log events并写入到它的中继日志(relay log);
(3) Slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)。
2.配置内容
①先使用命令查看mysql配置文件的位置,然后打开mysql配置文件:
sudo find / -name my.cnf
sudo vi /etc/mysql/my.cnf
里面无内容,并指向另一个文件,故打开/etc/mysql/mysql.conf.d/里面的mysqld.cnf:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
②分别修改master和slave的配置文件,
master:
server-id=1//配置服务器的服务号
log-bin=master-bin//指定数据库操作的日志文件
log-bin-index=master-bin.index
slave:
server-id=2//配置服务器的服务号
打完字后,按ESC,然后输入 :wq 就保存退出了。
③更多资料可以参考:https://blog.csdn.net/qq_34592810/article/details/81141302
二、数据库备份
①启动mysql数据库并登录:
service mysql start
mysql -u root -p //回车后输入密码
②创建数据库test_db和数据表test_table,向其中插入三条实验数据:
create database test_db charset=utf8;
use test_db;
create table test_table (test_num int unsigned not null);
INSERT INTO test_table (test_num) VALUES (123456);
INSERT INTO test_table (test_num) VALUES (67890);
INSERT INTO test_table (test_num) VALUES (5465765);
③exit退出数据库,进行备份:
mysqldump -uroot -p123456 test_db > test.sql
④ls
命令可以查看到备份产生的文件:
三、数据库恢复
①启动mysql数据库并登录:
service mysql start
mysql -u root -p //回车后输入密码
②查看数据库test_db中原有数据:
use test_db;
select * from test_table;
③模拟灾难发生,删除数据库:
drop database test_db;
④将数据恢复到新建数据库r_db中:
create database r_db charset=utf8;
exit
mysqldump -uroot -p1123456 test_db < test.sql
⑤查看恢复后数据库r_db:
四、数据库安全策略设置
1.修改root用户的密码
①修改root用户的密码,将密码设置为“roottest”:
mysql -uroot -p
set password for root@localhost = password (‘roottest’);
2.开启General Log:
set global general_log=on;
show variables like ‘%general_log%’;
五、数据库安全审计
1.配置日志功能:
①show variables like ‘log_%’;查看所有的log命令
②show variables like ‘log_bin’;查看具体的log命令
2.禁用LOCAL INFILE
有助于防止非授权用户访问本地文件。在PHP应用程序中发现有新的SQL注入漏洞时,这样做尤其重要。
先打开mysql配置文件:sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
在MySQL配置文件的[mysqld]部分增加下面的参数:set-variable=local-infile=0
最后重启mysql服务即可
六、数据库安全基线检查
1.删除’test’数据库 | 服务配置
测试数据库可供所有用户访问,并可用于消耗系统资源。删除测试数据库将减少mysql服务器的攻击面。
登陆mysql执行以下SQL语句删除test数据库:
DROP DATABASE test;
flush privileges;
2.禁用symbolic-links选项 | 服务配置
禁用符号链接以防止各种安全风险
编辑Mysql配置文件 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf ,在[mysqld] 段落中配置skip_symbolic_links=yes
,并重启mysql服务。
3.确保配置了log-error选项 | 安全审计
启用错误日志可以提高检测针对mysql和其他关键消息的恶意尝试的能力,例如,如果错误日志未启用,则连接错误可能会被忽略。
编辑Mysql配置文件/etc/my.cnf,在[mysqld_safe] 段落中配置log-error参数,<log_path>代表存放日志文件路径,如:/var/log/mysqld.log,并重启mysql服务:
log-error=/var/log/mysqld.log