您的位置:首页 > 数据库 > MySQL

基于MySQL 数据库的审计设计方案

2018-01-18 17:23 211 查看
点击打开链接 --源地址信息

目录

1 xxx基于数据库审计基本信息

2 场景描述

3 使用范围规则

4 角色与职责

5 审计系统环境的部署

5.1 MySQL数据库部署

5.2 Replicate 部署

5.3 半同步复制配置

5.4 备份策略

6 审计操作

6.1数据库层面审计操作

6.2 general_log 日志审计操作

6.3 历史操作查询及安全

7 结论

一:马耳他基于数据库审计基本信息

基本信息
数据库类型
MySQL数据库
涉及业务库
马耳他online数据库
审计规则
通过Slave节点的general日志
保留时间
2年
操作执行人
撰写时间
2018.1.18
注: 审计粒度一般,只能查询单位时间下得SQL操作,及数据完整性。

二: 场景描述

本文档的目的,源于对马耳他Online业务数据库得日常操作,数据的完整性以及数据安全的审计措施,因时区及网络资源等因素,此用于MySQL的审计环境不建议放在国内。同时环境在审计粒度上,仅限于数据库历史的日常操作、日常修改、历史数据的查询。

三:使用范围规则

本文档操作及指引,仅限于按要求部署的MySQL数据库服务器,同时在此审计粒度上,也适用于公司其他业务的MySQL数据库服务器。

系统的设计、维护、升级、演练等,整个实施过程中必须遵循此文档规范。

本系统所有账号、密码、权限按需分配,严格控制。设为局域网环境,禁止连

接internet 网络。

系统及版本要求,参考马耳他现有资源部署基础环境。磁盘容量应满足数据备

份(保留2-3年数据容量) 及高可用性(raid5 或raid10)要求。

四:角色与职责

角色
职 责
操作需求
DBA
审计人员
通过对Slave节点及general log日志的查询,分析历史操作信息。
审计需求
其他人员
Read_only 规则,仅查询。
按需分配
五: 审计系统环境的部署

5.1 MySQL数据库部署

详见文档 《MySQL数据库安装文档》

5.2 Replicate 部署

1) 定义:

Master : 主库(马耳他对外提供业务的节点)

Slave1 : 中继节点(马耳他实时同步的备节点)

Slave2 : 审计节点(此次需部署配置的节点)

2) 审计Slave 基于实时同步Slave 节点,Replicate复制模式为

Master ->Slave1->Slave2 模式,其目的最大化的减少线上Master性能消耗,

所有操作不涉及Master,只涉及中继节点slave1和 审计节点slave2.

3) 中继节点主要参数:

log_slave_updates=1

log_bin=/路径

binlog_format = row

4) 审计节点主要参数:

Server_id = xx

Read_only = Ture

Log_bin = /xxx/mydb-audit-bin.dbf

binlog_format = row

sync_binlog=1

expire_logs_days= Time(Day)

autocommit = 1

5) Replicate 配置:

MYSQL> CHANGE MASTER TO MASTER_HOST=‘xxx’,MASTER_PORT= ,MASTER_USER=’xx’,MASTER_PASSWORD=’xx’,MASTER_LOG_POS= ,MASTER_LOG_FILE=‘xx’;

MYSQL>START SLAVE;

MYSQL>SHOW SLAVE STATUS\G;

5.3 半同步复制配置

使用半同步复制的目的,使数据能实时同步。同时需满足条件。

1),MySQL 数据库 必须在5.5及以上的版本。

2),变量have_dynamic_loading 为 YES

3), Replicate 同步已经存在

首先加载插件:

中继节点:

MYSQL> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;

MYSQL> INSTALL PLUGIN rpl_semi_sync_slave SONAME ‘semisync_slave.so’;

查看是否成功:

MYSQL> show plugins;

MYSQL> SELECT PLUGIN_NAME,PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE ‘%semi%’;

启动半同步复制:

MYSQL> SET GLOBAL rpl_semi_sync_master_enabled =1;

MYSQL> SET GLOBAL rpl_semi_sync_slave_enabled=1;

MYSQL> STOP SLAVE IO_THREAD; --slave2

MYSQL> START SLAVE IO_THREAD; --slave2

5.4 部署要求

除了每天定时的备份外,slave2 节点的二进制文件需定时定期备份。

Slave2 节点 以read_only 模式开启,所有的数据操作只能读,而不能修改。控制权限管理包含系统登陆及数据库登陆。

1) Mysql数据库root 用户仅限localhost 登陆。

MYSQL> set password for password(“new password”);

2) 创建只读用户,账号密码符合安全规则,并配置连接白名单策略。

MYSQL> CREATE USER AUDIT@’source_ip’ identified by ‘password’;

MYSQL> GRANT USAGE on *.* to AUDIT@’source_ip’;

MYSQL> GRANT SELECT ON *.* TO AUDIT@’source_ip’;

3) 数据库相应目录,权限管理。

Chown –R mysql:mysql /(my.cnf,data,logfile)

Chattr +i my.cnf

5.5 数据备份要求

审计节点SLAVE2 ,数据库按数据容量,采用全备+每天增量备份方式备份数

据。 通过备份工具Xtrabackup 备份及每天备份binlog日志。

备份策略

每周六,做一全备份。

周一 – 周五,周日,每天增量备份。

备份集保留周期为 1年

恢复策略

全恢复 = 全备份集+ 增量备份集

时间节点恢复 = 全备份集+增量备份集+binlog日志。

六:审计操作

6.1数据库层面审计操作

通过SQL的日常操作,符合白名单策略的用户,有对数据库的查询权限。

6.2 general_log 日志审计操作

这里以实际实例展示,MySQL数据库必须开启binlog 日志,同时推荐使用

row 行模式开启。此模拟环境MySQL 版本为5.7.18,与马耳他环境一致。

如果考虑性能问题,general_log 一般推荐开启,因其记录详细的日志,消耗

系统5-10% 的性能。可以使用binlog 查询(binlog 记录信息粒度相对general

log 要粗), 因此,这里审计slave2节点开启general 日志。

MYSQL > set global general_log=on;

MYSQL > flush privileges;

MYSQL > show variables like ‘general%’;

示例展示:

--开启general log

--新建数据量audit ,并创建用户为audit 的用户

---audit 通过异地登陆

--创建测试表 audit_test,并插入4条数据:

--- 通过general log 审计

通过日志,可以很清楚的看见,异地登陆信息,操作信息。

6.3 历史操作查询及安全

1) 操作系统(linux环境),修改shadow,passwd,gshadow文件不可改变位

Chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow

2) MySQL数据库必须非root权限操作(这里系统也使用mysql).

3) 修改当前用户rm 命令防止误删除操作。

这里推荐使用safe-rm 开源原件,替换系统原rm 命令,

wget -c https://launchpadlibrarian.net/188958703/safe-rm-0.12.tar.gz
tar –xvf safe-rm-0.12.tar.gz -C /usr/local/

cd safe-rm/

cp safe-rm /usr/local/bin/rm -f

chown root:root /usr/local/bin/rm

vi /etc/profile

--- add

PATH=/usr/local/bin:/bin:/usr/bin:$PATH

source /etc/profile

设置保护名单

vim /etc/safe-rm.conf

--- add

/

/home/mysql

/xxxxx/my.cnf

/usr/local/mysql

/etc

/etc/safe-rm.conf

示例展示:

备注: 良好的操作工作习惯,非常重要,不过于依赖工具。

4) 系统级别信息记录

通过在/etc/profile 新增一下代码,可有效记录登陆系统的操作记录,同时把此文件及历史记录信息加入safe-rm 保护名单中。

--- add /etc/profile

### add ###

#PS1="`whoami`@`hostname`:"'[$PWD]'

PS1="[\u@\h \W]"#

history

USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'`

if [ "$USER_IP" = "" ]

then

USER_IP=`hostname`

fi

if [ ! -d /tmp/history ]

then

mkdir /tmp/history

chmod 777 /tmp/history

fi

if [ ! -d /tmp/history/${LOGNAME} ]

then

mkdir /tmp/history/${LOGNAME}

chmod 300 /tmp/history/${LOGNAME}

fi

export HISTSIZE=4096

DT=`date +"%Y%m%d_%H%M%S"`

export HISTFILE="/tmp/history/${LOGNAME}/${USER_IP} history.$DT"

chmod 600 /tmp/history/${LOGNAME}/*history* 2>/dev/null

source /etc/profile

示例展示:

七: 总结

因MySQL特有的逻辑设计,除DB层面审计外,还对系统层面做了粗粒度

的策略管理,这样能更好的规避误操作。

通过对slave2审计节点的部署及策略配置,除基于MySQL数据库generallog日志审计粒度外,关于操作系统的用户登陆,用户操作,文件修改,历史查询等方面也做了策略配置。

…………………….…………… The End
………………………………….
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: