应用场景
场景描述
数据库审计是一种对数据库访问行为进行记录、实时监控和合规分析的技术与管理手段。
审计功能对数据库系统的安全性至关重要。数据库安全管理员可以利用审计日志信息,重现导致数据库现状的一系列事件,找出非法操作的用户、时间和内容等,主要提供数据库系统对非法操作的追溯及举证能力。
传统审计主要记录用户对数据库的启停、连接、DDL、DML、DCL等操作。由于对数据库全量操作进行审计会导致数据库性能下降,所以传统审计提供一系列参数开关以便用户进行选择性审计。
传统审计采用记录到OS文件的方式来保存审计日志,审计结果包含以下字段:时间、操作类型、操作结果、用户ID、用户名、数据库、客户端信息、访问对象名称、细节信息、节点名称、线程ID、本地端口、远程端口。GaussDB支持审计管理员通过SQL函数接口进行对审计记录的查询,并且根据上述字段对查询结果进行过滤;审计管理员也可以通过SQL函数接口对审计记录进行删除。
由于审计记录存放在OS文件中,数据库提供了一系列参数来控制审计文件的管理策略,例如:审计文件存放目录、最大保留文件数、最大占用空间、单个审计文件大小上限等。GaussDB会根据上述参数对审计文件进行审计文件轮转、清理等管理动作。
统一审计机制是一种通过定制化审计策略实现高效安全审计管理的技术。管理员只需定义审计对象和审计行为,当用户执行的操作与预设策略相关时,系统将自动生成对应的审计行为并记录日志。这种灵活的策略配置可覆盖用户管理、DDL和DML等常见操作,满足日常审计需求,提升安全管理效率。管理员可以为操作行为或数据库资源配置定制审计策略,该策略针对特定的用户场景、用户行为或数据库资源进行审计。在开启了统一审计功能后,当用户访问数据库时,系统将根据用户身份信息如:访问IP、客户端工具、用户名来匹配相应的统一审计策略,之后根据策略信息对用户行为按照访问资源(LABEL)和用户操作类型(ACCESS | PRIVILEGES)进行统一审计。
统一审计的目的是将现有的传统审计行为转变为针对性的跟踪审计行为,将目标之外的行为排除在审计之外,从而简化管理。
触发条件
关于传统审计功能,用户需要了解以下几点内容:
- 传统审计总开关audit_enabled支持动态加载。在数据库运行期间修改该配置项的值会立即生效,无需重启数据库。默认值为on,表示开启审计功能。
- 除了传统审计总开关,各个审计项也有对应的开关。只有开关开启,对应的审计功能才能生效。
- 各审计项的开关支持动态加载。在数据库运行期间修改审计开关的值,不需要重启数据库便可生效。
传统审计会产生大量的审计日志,且不支持定制化的访问对象和访问来源配置。而统一审计策略支持绑定资源标签、配置数据源输出审计日志,可以提升安全管理员对数据库监控的效率。
统一审计功能使用需开启安全策略开关enable_security_policy,统一审计机制基于资源标签进行审计行为定制化,且将当前所支持的审计行为划分为ACCESS类和PRIVILEGES类。一个完整的审计策略创建的SQL语法如下所示:
CREATE RESOURCE LABEL auditlabel add table(table_for_audit1, table_for_audit2); CREATE AUDIT POLICY audit_select_policy ACCESS SELECT ON LABEL(auditlabel) FILTER ON ROLES(usera); CREATE AUDIT POLICY audit_admin_policy PRIVILEGES ALTER, DROP ON LABEL(auditlabel) FILTER ON IP(local);
其中,auditlabel为本轮计划审计的资源标签,该资源标签中包含了两个表对象;audit_select_policy定义了用户usera对auditlabel对象的SELECT行为的审计策略,不区分访问源;audit_admin_policy定义了从本地对auditlabel对象进行ALTER和DROP操作行为的审计策略,不区分执行用户;当不指定ACCESS和PRIVILEGES的具体行为时,表示审计针对某一资源标签的所有支持的对应行为。当不指定具体的审计对象时,表示审计针对所有对象的操作行为。统一审计策略的增删改也会记录在统一审计日志中。506.1.0版本之后统一审计支持三种审计记录的位置,分别是每一个DN节点的rsyslog日志、每一个DN节点的审计日志文件或第三方Elastic Search系统来支持用户对审计日志的分析和处理。
业务影响
对于传统审计功能特性,开启审计功能GUC参数后会对用户相关类型的操作记录审计日志,即由工作线程中获取审计日志需要记录的操作信息,通过共享内存发送到审计线程异步批量写入审计文件。由于存在审计日志的构造和共享内存的写入,开启审计功能后业务性能会受一定程度的影响。因此,当开启对DML和SELECT操作的审计功能后,如果业务上执行相关操作较频繁,会影响性能。用户可通过调整audit_thread_num修改审计线程的个数以减少审计对整体性能的影响。开启审计多线程后,会出现多个线程同时对一块审计文件区域进行I/O写入,会造成短时I/O升高。
由于传统审计只能对某一类型操作进行全量审计,无法做到对某一对象特定用户、IP的具体操作进行审计,因此用户可选用统一审计特性做细粒度审计。
对于统一审计功能特性,统一审计的实现是基于用户自定义的审计策略,因此相比传统审计,对于审计策略的管理和加载是执行时性能影响的部分。在使用统一审计时,需要加载审计策略到内存中来匹配用户的操作是否满足统一审计策略来构造统一审计日志,审计策略越具体到确定用户在确定的IP地址对某一对象执行某一操作,统一审计日志的解析构造流程越复杂,相对传统审计生成日志的时间复杂度会变高,但整体可避免对全量操作审计导致的性能劣化。