传统审计依据开关定义了不同的审计组合行为。事实上,这种无区分对待的审计行为虽然记录了所有想要审计的行为,但是对于通过审计日志发现问题则显得不那么容易,且管理员无法为特定的用户定义特定的行为,反而造成了系统处理的负担。因此需要为审计添加更精细化管理的能力。
统一审计的目的在于通过一系列有效的规则在数据库内部有选择性执行有效的审计,从而简化管理,提高数据库生成的审计数据的安全性。本节所述的技术目前处于研发阶段,对应产品尚未向客户发布。
openGauss提供了一套完整的统一审计策略机制,依据不同任务的诉求对用户的行为进行定制化审计管理。更进一步,openGauss的统一审计不仅可以依据用户、依据表进行审计行为定义,同时还可以扩展至通过IP地址、APP的名称来过滤和限制需要审计的内容。实际的语法如下所示:
CREATE AUDIT_POLICY policy_name
[
(privilege_audit_clause) | (access_audit_clause)
[filter_clause FILTER_TYPE(filter_value)]
[ENABLED|DISABLED]
];
其中,privilege_audit_clause定义语法如下:
PRIVILEGES (DDL|ALL) [ ON (LABEL(resource_label_name)) [, …]* ];
该语法定义了针对DDL类语句的审计策略,其中LABEL表示一组资产集合,即数据库对象的集合。access_audit_clause定义语法如下:
ACCESS (DML|ALL) [ ON (LABEL(resource_label_name)) [, ...]* ];
该语法定义了针对DML类语句的审计策略。filter_clause标记需要过滤的信息,常见的Filter types类型包括IP、APPS应用(访问的应用名)、ROLES(数据库系统用户)以及LABEL对象。
一个有效的统一审计策略可参见如下:
CREATE AUDIT_POLICY admin_policy PRIVILEGES CREATE, ALTER, DROP FILTER ON IP(local), ROLES(dev);
表示创建针对CREATE/ALTER/DROP操作的审计策略,审计策略只对dev用户在本地(local)执行CREATE/ALTER/DROP行为时生效。




