HGDB 安全版数据库审计

118 阅读5分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情

一、参数说明

1.1 V4.3 版本

highgo=> select show_audit_param();
           show_audit_param
---------------------------------------
 hg_audit_Log = all                    +
 hg_audit_LogCatalog = on,            +
 hg_audit_LogClient = off,            +
 hg_audit_LogLevel = log,                +
 hg_audit_LogParameter = off,             +
 hg_audit_LogRelation = off,              +
 hg_audit_LogStatementOnce = off,           +
 hg_audit_Role = ,                     +
 hg_audit_filename = %d_%H,               +
 hg_audit_truncate_on_rotation = off,        +
 hg_audit_RotationAge = 1440 min,           +
 hg_audit_RotationSize = 10240 KB,          +                              

hg_audit_Log:审计范围,可以是 read,write,function,role,ddl, misc,all。默认是 all。
hg_audit_LogCatalog:是否审计系统表,默认是开。
hg_audit_LogClient:是否将日志信息发送给客户端,默认关。
hg_audit_LogLevel:审计日志的级别,可以是 debug5,debug4,debug3, debug2,debug1,info,notice,warning,log。
hg_audit_LogParameter:记录传入的参数,默认关。
hg_audit_LogRelation:是否为每一个表都创建单独的日志项。默认关。
hg_audit_LogStatementOnce:相同查询只记录一次,默认关。
hg_audit_Role:该参数的配置对于审计信息记录无影响,默认配置即可。
hg_audit_filename:审计日志的文件格式,默认%d_%H。
hg_audit_truncate_on_rotation:审计日志自动覆盖。默认关。
hg_audit_RotationAge:自动覆盖的时间间隔。默认 1440 分钟。
hg_audit_RotationSize:自动覆盖的最大文件大小,默认 10M。

1.2 V4.5 版本

highgo=> select show_audit_param();
          show_audit_param
------------------------------------
 hg_audit = off,                   +
 hg_audit_analyze = off,           +
 hg_audit_alarm = email,           +
 hg_audit_alarm_email =            +
 hg_audit_logsize = 16MB,          +
 hg_audit_keep_days = 7,           +
 hg_audit_full_mode = 1            +
 hg_audit_file_archive_mode = off, +
 hg_audit_file_archive_dest =      +

hg_audit:审计总开关,默认为 on。
hg_audit_analyze:审计分析开关, on 表示需要检查用户配置的审计事件风险等级,并根据风险等级进行处理, off 表示只记录审计记录,而不处理风险等级,默认为off。
hg_audit_alarm:审计告警方式,当前只支持 email 方式,即当需要进行审计告警时,发送邮件到 hg_audit_alarm_email 所配置的邮箱。
hg_audit_alarm:审计告警方式,当前只支持 email 方式,即当需要进行审计告警时,发送邮件到 hg_audit_alarm_email 所配置的邮箱。
hg_audit_logsize:生成的审计文件大小,可配置的范围为 16MB~1GB;默认为16MB。
hg_audit_keep_days: hgaudit 目录下的审计记录文件所保存的时间(以天为单位),若超过这个时间,相关文件将会被删除。 (该参数在 HGDB-SEE V4.5.6 及以后的版本中支持)
hg_audit_full_mode:磁盘空间不足时,是否自动关闭审计功能,默认值为 1 开启。
hg_audit_file_archive_mode:审计自动归档模式的开关, on 表示打开审计文件自动归档,审计归档进程扫描 hgaudit/audit_archive_ready 下的 ready 文件,把相应的审计日志文件归档到 hg_audit_file_archive_dest 指定的路径下,默认为 off。
hg_audit_file_archive_dest: 审计归档路径,只支持绝对路径。设定的路径必须存在且数据库运行用户对其有写权限。

二、修改审计策略

审计管理员 syssao 设置

2.1 V4.3 版本

--查看审计策略配置
select show_audit_param();

--修改审计策略配置
select set_audit_param('hg_audit_Log','ddl');

--开启审计日志循环覆盖
select set_audit_param('hg_audit_truncate_on_rotation','on');

--审计日志覆盖间隔为一周,60*24*7=10080
select set_audit_param('hg_audit_RotationAge','10080');

--审计日志名称以星期缩写格式命名
select set_audit_param('hg_audit_filename','%a');

--重启数据库
pg_ctl restart

2.2 V4.5 版本

1)配置语句审计

语法

--配置
audit statement_opts by username|all [whenever [not] successful]
--取消
noaudit statement_opts by username|all [whenever [not] successful][cascade]
noaudit statement confid [cascade]

statement_opts:支持指定多个语句类型,用逗号分隔;如果对所有语句进行审计,则使 用 all,此时,对每一种语句记录一条审计配置项;该参数不能为空。支持类型有:CREATE ROLE、CREATE DOMAIN、CREATE PROCEDURE、CREATE INDEX、CREATE SCHEMA、CREATE SEQUENCE、CREATE TABLE、CREATE TABLE AS、CREATE TRIGGER、CREATE USER、CREATE VIEW、CREATE EXTENSION、CREATE DATABASE、ALTER ROLE、ALTER DOMAIN、ALTER PROCEDURE、ALTER INDEX、ALTER SYSTEM、ALTER SCHEMA、ALTER SEQUENCE、ALTER TABLE、ALTER TRIGGER、ALTER USER、ALTER VIEW、ALTER EXTENSION、ALTER DATABASE、DROP DOMAIN、DROP PROCEDURE、DROP ROLE、DROP INDEX、DROP SCHEMA、DROP SEQUENCE、DROP TABLE、DROP TRIGGER、DROP USER、DROP VIEW、DROP DATABASE、DROP EXTENSION、SELECT、SELECT INTO、INSERT、UPDATE、DELETE、GRANT、REVOKE、COMMENT、RESET、SET、TRUNCATE、COPY TO、COPY FROM、REINDEX、LOCK、CALL
username:要审计的用户名称。指定 all 表示所有用户。支持指定多个用户,用户间用逗号分隔。为每个用户记录一条审计配置项。
whenever [not] successful:审计模式。 whenever successful 表示只对成功的事件进行审计。 whenever not successful 表示只对失败的事件进行审计。不指定表示不论成功失败均进行审计。
cascade:如果该审计配置项配置了审计分析规则,则连同审计分析规则一同删除。

示例

--配置建表审计
audit create table by all whenever successful;

--查询配置的审计
select * from hgaudit_statement;

--取消建表审计
noaudit create table by all whenever successful;

2)配置对象审计

语法

--配置
audit object_opts on objtype [schema.]objname[.colname] by username|all
[whenever [not] successful]
--取消
noaudit object_opts on objtype [schema.]objname[.colname] by username|all
[whenever [not] successful] [cascade]
noaudit object confid [cascade]

object_opts:要审计的操作类型,不能省略。支持指定多个操作类型,用逗号分隔;如果对该对象的所有操作审计,则使用 all;此时,对每一种操作类型记录一条审计配置项。(支持的语句见 12.6)
objtype:要审计的对象的类型,必填项;支持 table、 view、 column、sequence、 function、 procedure;不支持同时指定多个。
schema:对象所在的模式。如不指定,按照 search_path 的定义搜索。 objname:对象名称。必填项。
colname:列名。表示对该列进行审计。仅当 objtype 为 column 时才需要指定,若不指定,表示对表的所有列进行审计。审计记录生成的时候,对每个对象都生成一条记录。
cascade:如果该审计配置项配置了审计分析规则,则连同审计分析规则一同删除。

示例

--配置对表他的插入审计
audit insert on table t1 by sysdba whenever successful;

--查询配置的审计
select * from hgaudit_object;

--取消配置的审计
noaudit insert on table t1 by sysdba whenever successful;

三、读取审计日志

--审计文件导入数据库审计日志表中
hgaudit_imp -f /opt/HighGo4.5.7-see/data/hgaudit/hgaudit-2022-01-21-110943.log 

--查询审计日志表
select * from hg_t_audit_log;