1.Kingbase审计介绍:
KingbaseES 的审计设置分为三种类型:服务器事件审计、语句审计、模式对象审计。
服务器事件审计:审计数据库服务器发生的事件,包含以下几种:数据库服务器的启动、数据库服务器的停 止、数据库服务器配置文件的重新加载、用户登录、用户登出。简称为:服务器级审计或服务器审计。默认 sysaudit.serverevent=true。
语句级别审计:也称为”STATEMENT AUDITING”,指在 DBMS 范围内,对 DBMS 拥有的结构或模式 对象进行操作时引发的事件进行审计,此类结构或模式对象并不指具体的某个结构或模式对象,而是 一类结构或模式对象的泛称。通常,包括 DBMS 提供的 DDL、DML、DQL、DCL、TCL 等语句引发的 事件。简称为:语句级审计或语句审计。自定义配置审计策略。
模式对象级别审计:也称为”SCHEMA OBJECT AUDITING”,指在某个确定的模式对象上进行 SELECT 或 DML 操作时引发的事件进行审计。模式对象包括表、视图、物化视图、过程、函数、序列。模式对 象不包括有依附关系的对象,如依附于表的索引、约束、触发器、分区表等。简称为:模式对象级审计 或对象审计。自定义配置审计策略。
审计功能有如下几个参数可以配置:
sysaudit.enable:设置审计功能是否开启的总开关,默认sysaudit.enable=off
sysaudit.serverevent:服务器事件审计开关,包括:服务器启动、关闭、重载配置,服务器启动时设置,默认sysaudit.serverevent=true
sysaudit.userevent:用户事件审计开关,包括:客户端登录和退出,默认sysaudit.userevent=true
在配置审计之前,需要对三权分立有一个了解。
2.审计策略配置
2.1 修改配置文件
修改 kingbase.conf 文件中 shared_preload_libraries 参数,然后重启数据库。
shared_preload_libraries = 'sysaudit'
或
shared_preload_libraries = 'liboracle_parser, synonym, plsql, force_view, kdb_flashback,plugin_debugger, plsql_plugin_debugger, plsql_plprofiler, ora_commands,kdb_ora_expr, sepapower, dblink, sys_kwr, sys_ksh, sys_spacequota, sys_stat_statements, backtrace, kdb_utils_function, auto_bmr, sys_squeeze,passwordcheck,sysaudit,identity_pwdexp,sys_audlog,passwordhistory'
2.2 加载插件
[kingbase@kingbaser6 ~]$ ksql -U system -dtest
test=# create extension sysaudit;
test=# show sysaudit.enable;
test=# \c test sao
test=> alter system set sysaudit.enable=on;
test=> select sys_reload_conf();
2.3 配置规则
2.3.1 服务器事件审计
只要打开审计开关以及服务器事件或者用户事件的开关,总是在审计中记录发生的服务器事件,不需要设置审计策略。
2.3.2 语句级别审计
创建语句级别审计:
sysaudit.set_audit_stmt(audit_type text, audit_users text, audit_schema text, audit_objs text )
参数说明:
audit_type:语句级审计策略,支持 DML、DDL、TCL 语句等,可以指定审计某一种SQL命令。
audit_users:审计的用户名,null 表示审计所有用户。
audit_schema:审计对象的模式名。可以为空,表示审计所有模式下的此类对象。
audit_objs:审计对象的名称,只有 select table、insert table、update table、delete table、 truncate table、drop table 这六种语句支持设置表名。
[kingbase@kingbaser6 ~]$ ksql -U system -d test
test=# \c test sao
test=> SELECT sysaudit.set_audit_stmt('CREATE TABLE', 'system', null, null); #审计 system 用户的表创建动作
test=> SELECT sysaudit.set_audit_stmt('select table', 'system', null, null); #审计 system 用户的表查询动作
test=> select * from sysaudit.all_audit_rules; #查询已配置的审计规则
test=> select sysaudit.remove_audit (16424); #取消编号为 16424的审计策略
查看审计日志:
[kingbase@kingbaser6 ~]$ ksql -U sao -d security
security=> select * from sysaudit_record_sao;
2.3.3 模式对象级别审计
sysaudit.set_audit_object(audit_type text, audit_users text, audit_schema text, audit_objs text)
参数说明:
audit_type:审计对象的类型,支持:TABLE、VIEW、MATERIALIZED VIEW、PROCEDURE、FUNCTION,大小写不敏感。
audit_users:审计的用户名,null 表示审计所有用户。
audit_schema:审计对象的模式名。可以为空,表示审计所有模式下的此类对象。
audit_objs:审计对象的名称,比如为表名、视图名、存储过程名。可以为空,表示审计指定模式下的所有此类对象。
[kingbase@kingbaser6 ~]$ ksql -U system -d test
test=# \c test sao
test=> select sysaudit.set_audit_object('table', 'system', 'public', null); #审计system用户对public模式下所有表的所有操作
2.3.4 审计入侵检测
当启动参数 sysaudit.ids 设置为 on 时(默认sysaudit.ids=off),实时侵害检测系统会实时分析用户的操作,将其与系统中创建的实时侵害检测规则进行匹配,判断该用户操作是否是侵害行为。当检测到侵害行为次数达到阀值时,服务器将自动断开连接。
sysaudit.create_ids_rule(rulename text, actionname text, username text, schname text, objname text, when_ever text, IP text, start_end_time text, interval_time int, times int)
参数说明:
rulename:创建的审计入侵检测规则名,具有唯一性,大小写敏感,不可指定为 null。
actionname:审计类型名,取值详见审计策略与 SQL 命令对应表,不可指定为 null。
username:审计用户名,未设置时需要指定为 null。
schname:审计模式名,未设置时需要指定为 null。
objname:审计对象名,未设置时需要指定为 null。
when_ever:审计时机,取值 ALL/SUCCESSFUL/FAILED ,指定为 null 时默认取值 FAILED。
IP:审计的IP列表,以’,’隔开。例如’”192.168.0.1”,”127.0.0.1”。指定为 null 时为检测所有IP地址。
start_end_time:审计的时间串,指定为 null 时为检测所有时间,格式如下: start_end_time ::= 具体时间段项 {, 具体时间段项} 具体时间段项::= 开始时间 TO 结束时间。
interval_time:时间间隔,单位为分钟,不可指定为 null。
times:检测次数阀值,不可指定为 null。
[kingbase@kingbaser6 ~]$ ksql -U system -d test
test=# \c test sao
test=> alter system set sysaudit.ids=on;
test=> select sys_reload_conf();
test=> select sysaudit.create_ids_rule('rule1', 'drop table', null, null, null,'ALL', null, null, 1, 5); #审计数据库内dorp行为,每分钟执行1次检测,当检测到侵害行为次数达到5次时,服务器将自动断开连接。
test=> select sysaudit.show_ids_rules();
test=> SELECT sysaudit.drop_ids_rule('rule1'); #删除审计入侵检测
2.3.5 审计记录查询
审计信息存储在数据库 SECURITY 中,审计管理员 sao 可通过视图 sysaudit_record_sao 查看,安全管理员 sso 可通过视图 sysaudit_record_sso 查看。
[kingbase@kingbaser6 ~]$ ksql -U sao -d security
security=> select * from sysaudit_record_sao limit 1;