openGauss数据库源码解析系列文章—安全管理源码解析(五)

openGauss数据库源码解析系列文章—安全管理源码解析(五)

openGauss 2023-08-04 18:01 发表于四川

五、审计与追踪

审计机制和审计追踪机制能够对用户的日常行为进行记录和分析,实现规避风险、提高安全性。

5.1 审计日志设计

审计内容的记录方式通常有两种:记录到数据库的表中、记录到OS文件中。openGauss采用记录到OS文件中(即审计日志)的方式来保存审计结果,审计日志文件夹受操作系统权限保护,默认只有初始化用户可以读写,从数据库安全角度出发,保证了审计结果的可靠性。日志文件的存储目录由audit_directory参数指定。

openGauss审计日志每条记录包括time、type、result、userid、username、database、client_conninfo、object_name、detail_info、node_name、thread_id、local_port、remote_port共13个字段。图23为审计日志的单条记录示例。

图片

图23 审计记录示例

对审计日志文件进行读写的函数的代码主要位于“pgaudit.cpp”文件中,其中主要包括两类函数:审计文件的读、写、更新函数;审计记录的增、删、查接口。

首先介绍审计文件的数据结构,如图24所示。

openGauss的审计日志采用文件的方式存储在指定目录中。通过查看目录,可以发现日志主要包括两类文件:形如0_adt的审计文件以及名为index_table索引文件。

图片

图24 审计文件结构

以adt结尾的审计文件中,每一条审计记录对应一个AuditData结构体。数据结构AuditData代码如下:

typedef struct AuditData {
    AuditMsgHdr header;    /*  记录文件头,存储记录的标识、大小等信息   */
    AuditType type;        /*  审计类型   */
    AuditResult result;      /*  执行结果   */
    char varstr[1];         /*  二进制格式存储的具体审计信息   */
} AuditData;

其中AuditMsgHdr记录着审计记录的标识信息,数据结构AuditMsgHdr的代码如下:

typedef struct AuditMsgHdr {
    char signature[2];   /*  审计记录标识,目前固定为AUDIT前两个字符’A’和’U’  */
    uint16 version;      /*  版本信息,目前固定为0   */
    uint16 fields;       /*  审计记录字段数,目前为13   */
    uint16 flags;        /*  记录有效性标识,如果被删除则标记为DEAD   
### OpenGauss 数据库中临时表的源码解析 #### 临时表的概念与作用 临时表是在会话期间创建的一种特殊类型的表,仅对该会话可见。当会话结束时,临时表及其数据会被自动删除。这种特性使得临时表非常适合用于中间计算结果的存储。 #### 源码中的实现细节 在OpenGauss数据库中,临时表的管理主要由`ExecEndRecursiveUnion`函数处理的一部分逻辑来完成[^1]。该函数不仅负责清理递归查询过程中产生的资源,还涉及到了临时表的相关操作。具体来说: - **内存分配与释放**:对于临时表而言,在其生命周期内可能会涉及到大量的内存分配和释放工作。为了提高效率并减少碎片化问题,OpenGauss采用了特定的数据结构来进行管理和优化。 - **哈希表的应用**:特别是在去重场景下,系统利用了高效的哈希表机制来跟踪已经存在的记录,从而确保同一事务内的唯一性约束得到满足。 ```sql CREATE TEMPORARY TABLE temp_table ( id INT PRIMARY KEY, name VARCHAR(50) ); ``` 这段SQL语句展示了如何在一个具体的会话中创建一个名为`temp_table`的临时表,并定义了一个整数类型的主键字段`id`以及一个字符串类型的字段`name`。 #### 日志记录方式 值得注意的是,尽管临时表具有短暂的存在周期,但在某些情况下仍然会产生相应的日志条目。这些日志通常是以行级别的形式被记录下来,而不是像普通持久化对象那样依赖于更底层的物理页变更描述[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值