一、数据库主从配置
原理:
(1)master将数据改变记录到二进制日志中,也就是配置文件log-bin指定的文件
(2)Slave通过I/O线程读取master中的binary log events并写入到它的relay log
(3)Slave 重做中继日志中的事件, 把中继日志中的事件信息一条一条的在本地执行一次,完 成数据在本地的存储, 从而实现将改变反映到它自己的数据(数据重放)。

登录MySQL数据库:mysql -uroot -p

Ubuntu IP:192.168.0.129

1、修改master和slave的配置文件/etc/my.cnf

mysql开启审计日志并查看 mysql8审计功能_web安全


2、创建用于赋值操作的用户tian

CREATE USER ‘tian’@‘localhost’ IDENTIFIED BY ‘1’;

GRANT REPLICATION SLAVE ON . TO ‘tian’@‘localhost’;

刷新授权表信息

flush privileges;

获取主节点当前binary log文件名和位置position

show master status;

mysql开启审计日志并查看 mysql8审计功能_安全_02


3、在从slave节点上设置主节点参数

CHANGE MASTER TO MASTER_HOST=‘localhost’, MASTER_USER=‘tian’, MASTER_PASSWORD=‘1’, MASTER_LOG_FILE=‘binlog.000002’, MASTER_LOG_POS=1168;

mysql开启审计日志并查看 mysql8审计功能_mysql开启审计日志并查看_03


4、查看主从同步状态

mysql开启审计日志并查看 mysql8审计功能_信息安全_04


5、开启主从同步,并查看主从同步状态

start slave;

show slave status\G;

mysql开启审计日志并查看 mysql8审计功能_web安全_05


二、数据库备份

备份指定库中的部分表(备份shool数据库中的student表):

mysqldump -uroot -p school student >school-student.sql

配置一个或多个完整的库

mysqldump -uroot -p school >school.sql

备份所有库

Mysqldump -u root -p --all-databases >all.sql备份数据库school:mysqldump -uroot -p school > /home/school.sql

mysql开启审计日志并查看 mysql8审计功能_信息安全_06


三、数据库恢复

1、进入MySQL数据库,彻底啊删除school数据库,然后重新创建school数据库

mysql开启审计日志并查看 mysql8审计功能_web安全_07


2、恢复数据库

第一种方法:

mysql -u root -p school < /home/school.sql

mysql开启审计日志并查看 mysql8审计功能_mysql开启审计日志并查看_08


查看恢复后的数据库

mysql开启审计日志并查看 mysql8审计功能_mysql_09


第二种方法:

(1)先删除数据库school

mysql开启审计日志并查看 mysql8审计功能_web安全_10


(2)再创建数据库school,并使用数据库school

mysql开启审计日志并查看 mysql8审计功能_web安全_11


(3)导入备份文件

source /home/school.sql

mysql开启审计日志并查看 mysql8审计功能_信息安全_12


(4)可以查看到恢复了删除之前的数据

mysql开启审计日志并查看 mysql8审计功能_mysql开启审计日志并查看_13


四、数据库安全策略设置

1、账号

以普通账户安全运行mysqld,禁止mysql以root账号权限运行,攻击者可能通过mysql获取系统root超级用户权限,完全控制系统。

mysql开启审计日志并查看 mysql8审计功能_web安全_14


2、口令

方法一:shell命令

Mysqladmin -u root -p password ‘123456’;

方法二:MySQL数据库命令

update user set password=password(‘123456’) where user=’root’ and host=’localhost’;

3、权限设置

授权用户权限:grant 权限 on 权限范围 to 用户;

回收权限:revoke 权限 on 范围 from 用户;(1)查看权限show grant;

mysql开启审计日志并查看 mysql8审计功能_mysql开启审计日志并查看_15


(2)使用GRANT命令定义用户的访问权。

仅能从school数据库的student表中使用select,无法改变数据库中这个表和其他表的任何数据。

mysql开启审计日志并查看 mysql8审计功能_信息安全_16


(3)revoke命令从一个用户移除访问权

mysql开启审计日志并查看 mysql8审计功能_mysql_17


4、日志审计

数据库应配置日志功能

(1)、查看所有的log命令。

mysql开启审计日志并查看 mysql8审计功能_web安全_18


(2)、查看具体的log指令

mysql开启审计日志并查看 mysql8审计功能_mysql开启审计日志并查看_19


5、禁用或限制远程访问

禁止网络连接,防止猜解密码攻击,溢出攻击和嗅探攻击。

如果数据库不需远程访问,可以禁止远程tcp/ip连接, 通过在mysqld服务器中参数中添加 --skip-networking 启动参数来使mysql不监听任何TCP/IP连接,增加安全性。强迫MySQL仅监听本机,方法是在my.cnf的[mysqld]部分增加下面一行:bind-address=127.0.0.1

mysql开启审计日志并查看 mysql8审计功能_mysql开启审计日志并查看_20


5、禁用local infile

因为在某些情况下,local infile命名可被用于访问操作系统上的其他文件(如/etc/passwd)

mysql开启审计日志并查看 mysql8审计功能_web安全_21


为禁用local infile命令,在mysql配置文件中增加‘set-variable=local-infile=0’参数。

mysql开启审计日志并查看 mysql8审计功能_信息安全_22


五、数据库安全审计

数据库审计能够实时记录网络上的数据库活动,对数据库操作进行细粒度审计的合规性管理,对数据库遭受到的风险行为进行告警,对攻击行为进行阻断。

方法一:Genreal Log

默认情况下,MySQL不开启General log;开启General log后,MySQL将所有到达MySQL Server的SQL语句记录下来。

(1)查看General Log开启情况:执行SQL命令show variables like '%general_log%’ ;可以看到默认general_log是OFF的:

mysql开启审计日志并查看 mysql8审计功能_安全_23

(2)开启General Log: 执行SQL命令set global general_log=on 而后查看general_log打开了:

mysql开启审计日志并查看 mysql8审计功能_安全_24


3、验证:general_log打开后,所有SQL的访问都会记录在general_log_file指向的日志文件。

执行几个sql语句

mysql开启审计日志并查看 mysql8审计功能_web安全_25


然后查看/var/lib/mysql/ubuntu.log日志文件里面的内容,可以发现所做的操作在日志里:

mysql开启审计日志并查看 mysql8审计功能_mysql_26


方法二:BinLog+Init_connect

BinLog是MySQL操作时留下的日志,BinLog一方面可以用在数据库的恢复与主从复制上,另外一方面可以用来做数据库的审计。由于BinLog日志里面无法查询是谁在哪个时间段登录的等信息,缺少审计必要的信息。在MySQL中,每个连接都会先执行init_connect进行连接的初始化,我们可以在这里获取用户的登录名称和thread ID值。然后配合BinLog,就可以追踪到每个操作语句的操作时间,操作人等信息,再加上BinLog的日志信息实现审计。

方法三:使用审计插件

六、数据库安全基线检查

1、禁用local_infile选项会降低攻击者通过SQL注入漏洞器读取敏感文件的能力,编辑Mysql配置文件/etc/my.cnf,在mysqld 段落中配置local-infile参数为0,并重启mysql服务:local-infile=0

mysql开启审计日志并查看 mysql8审计功能_mysql_27


2、修改默认3306端口,避免使用熟知的端口,降低被初级扫描的风险。编辑/etc/my.cnf文件,mysqld 段落中配置新的端口参数,并重启mysql服务:port=3506

mysql开启审计日志并查看 mysql8审计功能_mysql_28


3、为Mysql服务使用专用的最低特权帐户,使用最低权限帐户运行服务可减小MySQL天生漏洞的影响。受限帐户将无法访问与MySQL无关的资源。使用非root和非sudo权限用户启动mysql服务。

4、禁止使用–skip-grant-tables选项启动Mysql服务 ,使用此选项,会导致所有客户端都对所有数据库具有不受限制的访问权限。编辑Mysql配置文件/etc/my.cnf,删除skip-grant-tables参数,并重启mysql服务

5、删除’test’数据库 ,测试数据库可供所有用户访问,并可用于消耗系统资源。删除测试数据库将减少mysql服务器的攻击面。登陆数据库执行以下SQL语句删除test数据库:DROP DATABASE test;

mysql开启审计日志并查看 mysql8审计功能_web安全_29


6、确保配置了log-error选项,启用错误日志可以提高检测针对mysql和其他关键消息的恶意尝试的能力。编辑Mysql配置文件/etc/my.cnf,在mysqld_safe 段落中配置log-error参数,<log_path>代表存放日志文件路径,如:/var/log/mysqld.log,并重启mysql服务:

log-error=<log_path>

mysql开启审计日志并查看 mysql8审计功能_mysql开启审计日志并查看_30


7、确保没有用户配置了通配符主机名,避免在主机名中只使用通配符,有助于限定可以连接数据库的客户端,否则服务就开放到了公网。执行SQL更新语句,为每个用户指定允许连接的host范围。 1. 登录数据库,执行use mysql; ; 2. 执行语句select user,Host from user where Host=’%’;查看HOST为通配符的用户; 3. 删除用户或者修改用户host字段,删除语句:DROP USER ‘user_name’@’%’; 。更新语句:update user set host = <new_host> where host = ‘%’;。 4. 执行SQL语句:

OPTIMIZE TABLE user;

flush privileges;

mysql开启审计日志并查看 mysql8审计功能_mysql开启审计日志并查看_31


8、匿名登陆检查 ,检查mysql服务是否允许匿名登录。

登陆Mysql数据库,执行以下命令删除匿名帐户:

delete from user where user=’’;

flush privileges;

mysql开启审计日志并查看 mysql8审计功能_web安全_32


9、禁用symbolic-links选项 ,编辑Mysql配置文件/etc/my.cnf,在mysqld 段落中配置skip_symbolic_links=yes,并重启mysql服务。

mysql开启审计日志并查看 mysql8审计功能_mysql开启审计日志并查看_33


10、确保MYSQL_PWD环境变量未设置,确保MYSQL_PWD环境变量未设置。删除系统环境变量中Mysql密码(MYSQL_PWD)配置。

11、确保log-raw选项没有配置为ON,当log-raw记录启用时,有权访问日志文件的人可能会看到纯文本密码。编辑Mysql配置文件/etc/my.cnf,删除log-raw参数。