关键字:
KingbaseES、安全、审计
审计概念与功能
对数据库系统中发生的动作(或事件),将其对应的操作对象、操作时间等信息记录下来的过程,称为审计。
任何系统的安全保护措施都不是完美无缺的,蓄意盗窃,破坏数据的人总是想方设法打破控制,审计功能将用户对数据库的所有操作自动记录下来放入审计日志中,审计员(sao)可以通过对审计日志的分析,对潜在的威胁提前采取有效的措施加以防范。KingbaseES 数据库提供了一套完整的审计机制,用来保证对数据库中的各种行为进行监控,进而为数据库的安全、可靠和有效提供有力的保障。
审计的实现概述
- 审计功能通过插件加载的方式来进行使用
- 当审计功能的插件被加载时,会执行 audit.c 文件中的 _KDB_init 函数来进行初始化动作
- 审计记录会首先被记录到 share memory 中,如果 share memory 空间不足,还会被记录到 temp cache file 中;后台进程会定期将 share memory 和 temp cache file 中的审计记录再写入系统表 sysaudit_record 中
- 如果开启了审计转储功能,审计系统表中的记录还会定期被后台进程导出并保存到物理文件中,系统表中导出的审计记录会被删除,防止由于系统表数据过大造成表空间不足
审计插件的初始化
- 预检查
- 检查是否为 master 进程,如果不是则直接返回
- 检查是否在 preload 阶段,如果不是则直接返回
- 检查审计插件是否已初始化完毕,如果是则直接返回
- 指定guc参数
- 读取诸如 sysaudit.enable,sysaudit.systemobjects 等审计参数,并将其映射到对应的guc全局变量
- 安装钩子函数
- 初始化审计规则等相关信息
- 注册审计相关的后台进程(n个审计记录进程 + 1个审计转储进程)
- 设置审计插件初始化完毕的标记
审计的 share memory 分布
- 审计的 share memory 大小
- 大小为(单位为Byte):guc_sysaudit_process_count * sizeof(AuditRecordCacheEntry) + ((Size)guc_sysaudit_record_cache_size * 1024 * 1024)
- 其中,guc_sysaudit_process_count 与 guc_sysaudit_record_cache_size 为用户可配置的guc参数,分别代表审计记录进程数量,以及审计记录缓存总大小(单位为MB)
- 审计的 share memory 空间分布
审计的 temp cache file 分布
- temp cache file 保存在 guc_auditlog_temp_cache_dir/.sysaudit_temp_cache 隐藏目录下,默认情况下,guc_auditlog_temp_cache_dir 为数据目录
- temp cache file 命名为.AuditCacheFile_{currPid},其中 currPid 为当前进程的 PID
- temp cache file 以字节流的形式依次保存 AuditRceord,dbname,sqltext,errmsg 等信息,具体分布分布如下: