mysql安全审计_等保测评2.0:MySQL安全审计
⼀、说明
本篇⽂章主要说⼀说MySQL数据库安全审计控制点的相关内容和理解。
MySQL除了⾃⾝带有的审计功能外,还存在着⼀些其它的审计插件。
虽然遇到这些插件的概率不⾼,我还是把这些插件的基本参数都列出来,到时候如果真遇到了,也不⾄于⼀头雾⽔。
⼆、测评项a)应启⽤安全审计功能,审计覆盖到每个⽤户,对重要的⽤户⾏为和重要安全事件进⾏审计;
b)审计记录应包括事件的⽇期和时间、⽤户、事件类型、事件是否成功及其他与审计相关的信息;
c)应对审计记录进⾏保护,定期备份,避免受到未预期的删除、修改或覆盖等;
d)应对审计进程进⾏保护,防⽌未经授权的中断。
三、测评项aa)应启⽤安全审计功能,审计覆盖到每个⽤户,对重要的⽤户⾏为和重要安全事件进⾏审计;
3.1. ⾃带的审计功能
在MySQL中⾃带了审计功能——general log,它会记录所有关于mysql的sql语句(所以会给服务器和数据库带来很⼤的资源占⽤)。
不过仅仅从测评要求的⾓度来说,如果开启了general log,那么是符合测评项a的。
查询的时候,可以使⽤log或者general关键词,这⾥⽤的是general(不过⽤log要好⼀些):show global variables like '%general%'
图中的general_log变量的值为OFF,则表⽰没有开启。
general_log_file则表⽰⽇志存储在哪,图中是存储在⼀个⽂件中。
MySQL 5.1.6版开始,可以将⽇志存储在表当中,这个由log_output参数进⾏控制,值为file,则代表存储在⽂件中,为table,则代表存储在gengera_log表中。mysql> show variables like 'log_output';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_output | TABLE |
+---------------+-------+
mysql> select * from general_log;
| 2018-07-17 23:00:12 | root[root] @ localhost [] | 2 | 1132333306 | Query | select * from test.student3
也可以去看⼀看/etc/myf⽂件,查看是否启⽤了general_log:[mysqld]
general_log = on // on为开启;off为关闭
general_log_file = /var/log/generalLog.log // 审计信息存储位置
log_timestamps = SYSTEM // 设置⽇志⽂件的输出时间为地⽅时
修改myf⽂件和设置global变量的区别在于,设置global变量,则数据库重启后设置就失效了。
⽽修改myf⽂件,数据库每次启动后,都会先去myf读取变量的值,再传给相应的global变量。
下⾯其它变量也是如此。
另外要说的⼀点是,变量general_log的类型是bool,可以设置的值为OFF(或者0),以及ON(或者1),所以设置为ON和1是⼀个意思。
3.2. MariaDB的Audit Plugin插件
该插件可以⽤于MySQL的⼀些版本上,⽐如MySQL 5.7.18。
该插件的相关变量为:SHOW GLOBAL VARIABLES LIKE 'server_audit%';
+-------------------------------+-----------------------+
| Variable_name | Value |
+-------------------------------+-----------------------+
| server_audit_events | CONNECT,QUERY,TABLE |
| server_audit_excl_users | |
| server_audit_file_path | server_audit.log |
| server_audit_file_rotate_now | OFF |
| server_audit_file_rotate_size | 1000000 |
| server_audit_file_rotations | 9 |
| server_audit_incl_users | |
| server_audit_logging | ON |
| server_audit_mode | 0 |
| server_audit_output_type | file |
| server_audit_query_log_limit | 1024 |
| server_audit_syslog_facility | LOG_USER |
| server_audit_syslog_ident | mysql-server_auditing |
| server_audit_syslog_info | |
| server_audit_syslog_priority | LOG_INFO |
+-------------------------------+-----------------------+
解释如下:server_audit_output_type:指定⽇志输出类型,可为SYSLOG或FILE
server_audit_logging:启动或关闭审计
server_audit_events:指定记录事件的类型,可以⽤逗号分隔的多个值(connect,query,table),如果开启了查询缓存(query cache),查询直接从查询缓存返回数据,将没有table记录
server_audit_file_path:如server_audit_output_type为FILE,使⽤该变量设置存储⽇志的⽂件,可以指定⽬录,默认存放在数据⽬录的server_audit.log⽂件中
server_audit_file_rotate_size:限制⽇志⽂件的⼤⼩
server_audit_file_rotations:指定⽇志⽂件的数量,如果为0⽇志将从不轮转mysql存储文档
server_audit_file_rotate_now:强制⽇志⽂件轮转
server_audit_incl_users:指定哪些⽤户的活动将记录,connect将不受此变量影响,该变量⽐server_audit_excl_users优先级⾼
server_audit_syslog_facility:默认为LOG_USER,指定facility
server_audit_syslog_ident:设置ident,作为每个syslog记录的⼀部分
server_audit_syslog_info:指定的info字符串将添加到syslog记录
server_audit_syslog_priority:定义记录⽇志的syslogd priority
server_audit_excl_users:该列表的⽤户⾏为将不记录,connect将不受该设置影响
server_audit_mode:标识版本,⽤于开发测试
这⾥我们⽐较关注的是server_audit_logging、server_audit_events、server_audit_output_type、server_audit_file_path、
server_audit_file_rotate_size、server_audit_file_rotations、server_audit_file_rotate_now。
server_audit_logging:
即为是否开启,bool类型,值为ON(1)以及OFF(0)。
server_audit_events:
记录的事件,如果为空字符串,则代表记录所有的事件。CONNECT:连接、断开连接和失败的连接,包括错误代码
QUERY:以纯⽂本形式执⾏的查询及其结果,包括由于语法或权限错误⽽失败的查询
TABLE:受查询执⾏影响的表
QUERY_DDL:与QUERY相同,但只筛选DDL类型的查询(create、alter、drop、rename和truncate语
句,create/drop[procedure/function/user]和rename user除外(它们不是DDL)
QUERY_DML:与QUERY相同,但只筛选DML类型的查询(do、call、load data/xml、delete、insert
、select、update、handler和replace语句)
QUERY_DCL:与QUERY相同,但只筛选DCL类型的查询(create user、drop user、rename user、grant、revoke和set password 语句)
QUERY_DML_NO_SELECT:与QUERY_DML相同,但不记录SELECT查询。(从1.4.4版开始)(do、call、load data/xml、delete、insert、update、handler和replace语句)
server_audit_file_path:
当server_audit_output_type为file时,将路径和⽂件名设置为⽇志⽂件。如果指定的路径作为⽬录存在,那么将在该⽬录内创建名为“server_audit.log”的⽇志。否则,该值将被视为⽂件名。默认值“ server_audit.log”,这意味着将在数据库⽬录中创建此⽂件。
server_audit_file_rotate_size、server_audit_file_rotations、server_audit_file_rotate_now:
当server_audit_output_type为file时,是否强制轮转(server_audit_file_rotate_now),每个⽇志⽂件的最⼤⼤⼩
(server_audit_file_rotate_size),以及⽇志⽂件的最⼤数量(server_audit_file_rotations)。
那么,从这个插件的功能来看,基本上默认配置就可以满⾜测评项的要求。
3.3. MySQL Enterprise Audit Plugin
MySQL 企业版的 Enterprise Edition 中⾃带 Audit Plugin ,名为 audit_log.so。
对于该插件,可以在myf⽂件中加⼊以下参数启⽤它:[mysqld]
plugin-load=audit_log.so
也可以查询插件,看到插件的状态:mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE 'audit%';
+-------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------+---------------+
| audit_log | ACTIVE |
+-------------+---------------+
该插件的相关系统变量为:mysql> SHOW VARIABLES LIKE 'audit_log%';
+-----------------------------+--------------+
| Variable_name | Value |
+-----------------------------+--------------+
| audit_log_buffer_size | 1048576 |
| audit_log_connection_policy | ALL |
| audit_log_current_session | OFF |
| audit_log_exclude_accounts | |
| audit_log_file | audit.log |
| audit_log_filter_id | 0 |
| audit_log_flush | OFF |
| audit_log_format | NEW |
| audit_log_include_accounts | |
| audit_log_policy | ALL |
| audit_log_rotate_on_size | 0 |
| audit_log_statement_policy | ALL |
| audit_log_strategy | ASYNCHRONOUS |
+-----------------------------+--------------+
audit_log_connection_policy:
控制审核⽇志插件如何将连接事件写⼊其⽇志⽂件的策略
audit_log_exclude_accounts:
不应记录事件的帐户,除此之外的账户的事件都会被记录。该值应为NULL或包含⼀个或多个⽤逗号分隔的帐户名列表的字符串。audit_log_file:
⽇志记录的⽂件名,可以是相对路径(相对于数据库⽬录)和完整路径。
audit_log_format:
⽇志格式,可以是 OLD(旧样式XML), NEW(新样式XML,默认值)和(从MySQL 5.7.21开始)JSON。
audit_log_include_accounts:
要包括在审核⽇志记录中的帐户。如果设置了此变量,则仅审核这些帐户。
注意,audit_log_exclude_accounts与audit_log_include_accounts是互斥的,它们之间只有⼀个的值为⾮null,不能同时为⾮null。
audit_log_policy:
事件记录策略
audit_log_rotate_on_size:
如果 audit_log_rotate_on_size 值为0,则审核⽇志插件不会执⾏⾃动⽇志⽂件轮换。⽽是⼿动使⽤audit_log_flush刷新⽇志⽂件。在这种情况下,请在刷新⽂件之前在服务器外部⼿动重命名该⽂件(要不然原来的记录就没了)。
如果该 audit_log_rotate_on_size 值⼤于0,则会⾃动进⾏基于⼤⼩的⽇志⽂件轮换。每当写⼊⽇志⽂件导致其⼤⼩超过该
audit_log_rotate_on_size 值时,审核⽇志插件都会关闭当前⽇志⽂件,将其重命名,然后打开⼀个新的⽇志⽂件。
如果将此变量设置为不是4096的倍数的值,它将被截断为最接近的倍数。(因此,将其设置为⼩于4096的效果是将其设置为0且不进⾏旋转,除⾮⼿动进⾏。)
audit_log_statement_policy:
应该被记录的语句事件,在服务器启动的时候如果audit_log_statement_policy和audit_log_policy都显⽰赋予了值,那么
audit_log_statement_policy可能会被audit_log_policy覆盖。
基本上默认配置也⾜够满⾜测评项要求了。
3.4. McAfee的libaudit_plugin
也是⼀个审核插件,其相关参数如下:SHOW GLOBAL VARIABLES LIKE '%audi%';
audit_json_file #是否开启audit功能(ON\OFF)
audit_json_log_file #log⽇志名称及存储位置,默认mysql的data⽬录
audit_record_cmds='' #设置需要监控的SQL命令,默认全部(即该值为null)
audit_record_cmds='insert,delete,update,create,drop,alter,grant,truncate' #这是⼀些例⼦
audit_record_objs='' #设置需要监控的数据库名称和表名,默认全部(即该值为null)
audit_record_objs=‘mysql.*’ #⼀个例⼦
audit_whitelist_users #⽤户⽩名单更多详细解释请查看官⽅⽂档:McAfee的audit
基本上启⽤后就满⾜测评项要求了。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论