MySQL的审计功能

安全高效的使用数据库,在现在的IT环境里显得尤为重要,审计功能可以对数据库的操作进行评估,以满足安全生产和法律法规的要求。MySQL的企业版里,提供了一项审计功能——MySQL Enterprise Audit。MySQL的审计功能以插件来实现,支持在特定的MySQL服务器上执行标准审计、基于规则的监视、日志记录以及阻挡连接和查询活动。MySQL Enterprise Audit使用了公开的MySQL Audit API,如果你想使用这个API去自己开发一个审计插件,可以参考手册链接。

当用户安装了该插件后,会产生一个默认名称为audit.log的审计日志,该日志默认为XML格式,也支持JSON格式。日志的内容包括客户端的连接与断开,连接期间执行的操作,以及访问的对象等等。

MySQL Enterprise Audit主要由三部分构成:

一、服务器端由一个名为audit_log的插件对各种事件进行校验,以决定是否将其计入审计日志。

二、一组用户定义的函数(UDF)用于维护过滤器,控制记录行为,加密和读取日志等操作。

三、保存用户数据和过滤器数据的mysql系统表。

MySQL的审计功能使用起来非常简单,DBA启用插件后(插件可以动态启用、禁用),用户连接服务器进行的操作就可以记录到日志,DBA之后可以通过日志来评估审计事件。并且输出的日志格式与Oracle的审计兼容,满足Oracle审计规范。

MySQL的审计功能

审计日志支持过滤功能,用户可以根据需求灵活选择需要记录的审计事件。过滤是基于规则,通过用户定义函数(UDF)定义,并将其内容保存在mysql系统表内。过滤审计事件可以通过用户的账户、类、子类以及事件字段的值来实现。

过滤基于规则:

  • 包括/排除审计事件进行记录。
  • 除了记录功能,过滤器还可以阻止事件执行。
  • 定义多个过滤器,并且可以将其分配给任意数量的账户。
  • 可以定义默认的过滤器,为没有分配过滤器的用户使用。

通过使用下列UDF对审计进行操作:

  • audit_log_filter_set_filter():定义一个过滤器
  • audit_log_filter_remove_filter():删除过滤器
  • audit_log_filter_set_user():开始过滤用户帐户
  • audit_log_filter_remove_user():停止过滤用户帐户
  • audit_log_filter_flush():刷新过滤器表的手动更改

过滤器还可以阻挡执行特定事件,例如,对指定的表阻止其插入更新操作。

当执行该语句时,过滤器可以阻挡该操作,并返回“ERROR 1045 (28000): Statement was aborted by an audit log filter”。用户可以灵活利用该特性。

上述内容是关于MySQL企业版审计功能的一个简介,希望能对希望安全使用MySQL的您有所帮助。更为详尽的内容请访问官网手册。