基于自建和云服务场景实现mysql数据库安全审计-k8凯发天生赢家


基于自建和云服务场景实现mysql数据库安全审计
作者:安华金和 发布时间:2020-10-19


  mysql数据库是基于云原生的数据库产品之一,云原生为云数据库提供了重要动力,相比于传统自建数据库,云数据库比单个数据库具有更大的弹性和可扩展性。
  数据库审计主要用于监视并记录对数据库服务器的各类操作行为,并记入审计日志或数据库中以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是企业数据安全体系的重要组成部分。
  mysql企业版自带审计功能,但是需要付费。mysql社区版没有审计功能,基于成本的考虑,很多用户采用社区版mysql作为业务系统数据库。采用社区版mysql如何实现重要的审计功能,本文从自建和云服务两种情况来解答这个问题。
  自建mysql数据库的场景
  本文自建数据库所有实验环境是基于window10下mysql5.7这个版本。
  方法一 genreal log
  默认情况下,mysql不开启general log; 开启general log后,mysql将所有到达mysql server的sql语句记录下来。
  开启general log只要用户执行了操作,无论对错,mysql就会记录日志,这样的话日志量会非常庞大,对数据库效率有影响。所以我们一般不建议开启开功能,个别情况下可能会临时的开一段时间以供排查故障等使用。
  方法二 binlog init_connect
  binlog是mysql操作时留下的日志,binlog一方面可以用在数据库的恢复与主从复制上,另外一方面可以用来做数据库的审计。
  由于binlog日志里面无法查询是谁在哪个时间段登录的等信息,缺少审计必要的信息。在mysql中,每个连接都会先执行init_connect进行连接的初始化,我们可以在这里获取用户的登录名称和thread id值。然后配合binlog,就可以追踪到每个操作语句的操作时间,操作人等信息,再加上binlog的日志信息实现审计。
  如果已经有用户,需要对现有用户添加操作auditdb的权限:
  1 mysql> insert into mysql.db (host,db,user1,insert_priv) values ('%','auditdb','','y');
  2 query ok, 1 row affected (0.03 sec)
  3 mysql> flush privileges;
  4 query ok, 0 rows affected (0.00 sec)
  3、设置init_connect,并重启mysql数据库在初始化参数文件[mysql]部分添加如下内容:
  1 log-bin=mysql-bin #开启binlog
  说明:采用这种方式进行审计,由于init-connect只会在连接时执行,不会对数据库产生大的性能影响,但是init-connect不会记录拥有root权限的用户记录.
  方法三 使用审计插件
  除了商业版的审计插件外(商业版的目前安华金和的审计系统做的已经相当不错了,有需要的话大家可以自行了解一下),常见的还有三类审计插件percona audit log plugin、mariadb audit plugin、mcafee mysql audit plugin。这几个插件功能上大同小异,只是展示的内容和格式略有不同。
  二、关键审计参数说明server_audit_logging:启动或关闭审计
  server_audit_events:指定记录事件的类型,可以用逗号分隔的多个值(connect,query,table) ,默认为空代表审计所有事件。
  server_audit_incl_users:指定哪些用户的活动将记录,默认审计所有用户,该变量比server_audit_excl_users优先级高
  server_audit_excl_users:指定哪些用户行为不记录
  server_audit_output_type:指定日志输出类型,可为syslog或file,缺省输出至审计文件
  三、审计过程示例
  由于是验证测试,我们其余参数都按默认设置。
  我们看见,刚才在mysql数据库的操作都已经审计上了。
  使用公有云rds服务的场景
  目前云计算的普及,云供应商都提供云数据库服务,当然mysql是云数据库服务重要的一员。相比传统数据库,云数据库易于部署、管理和扩展,提供数据可靠性、安全性、运行状态监控等全套k8凯发天生赢家的解决方案。
  那么在云数据库mysql上是如何实现对数据库的审计的呢?我们以京东云云数据库mysql为例,京东云的mysql审计功能是通过mariadb audit plugin插件实现的。下面给大家介绍云数据库mysql审计的开启、使用、关闭等功能。
  1、登录云数据库 rds 管理控制台;
  2、选择需要查询 sql 审计的目标实例,点击目标实例, 进入实例详情页,切换至 sql 审计 tab 页;
  3、点击审计状态开关就可以在线切换审计的开启与关闭;
  4、执行一些数据库的操作,而后看审计数据。审计开启后,sql 审计查询功能说明如下:执行时间:可以选择从当前时间往前推 7 天的时间区间,作为 sql 审计查询的时间段;
  数据库:可以查看指定数据库的 sql 语句;
  账号:可以查看指定账号的 sql 语句。


网站地图