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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lmocm/article/details/79098678

点击打开链接  --源地址信息


 目录
 
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 ………………………………….

猜你喜欢

转载自blog.csdn.net/lmocm/article/details/79098678
今日推荐