1 数据库审计作用
数据库审计机制主要通过对SQL操作或其他操作记录审计日志的方式 ,增强数据库系统对非法操作的追溯及举证能力 。高斯数据库提供两种审计特性 :传统审计 ,统一审计。
2 传统审计
传统审计通过GUC参数配置需要对数据库的哪些操作进行审计,并通过将审计记录写入OS文件中(即审 计日志)的方式来保存审计结果 。传统审计特性提供SQL函数接口以供审计管理员查询/删除审计记录。
3 统一审计
统一审计通过定制化审计策略来实现高效安全审计 。管理员可以对数据库中某特定对象(模式/表/列)打 资源标签,并针对特定资源标签和过滤条件创建审计策略( DDL/DML)。 当用户执行的任务符合创建的 审计策略时,则数据库会记录下相应的行为并生成审计日志。
统一审计通过将审计记录发送至本地rsyslog或Elastic Search服务端来保存审计结果 。管理员可到对应的 日志存储端查看日志。
4 传统审计配置管理-审计配置项开关
传统审计可以记录用户对数据库的启停 、连接 、DDL 、DML 、DCL等操作,通过GUC参数开关控制对哪些操作进行审计。
1) 提供审计总开关参数audit_enabled,参数支持动态加载,在数据库运行期间修改该配置项的值会立即生效 ,无需重启数 据库 。默认值为on,表示开启审计功能。
2) 除了审计总开关,各个审计项也有对应的开关 。只有开关开启,对应的审计功能才能生效。各审计项的开关支持动态加载 。在数据库运行期间修改审计项参数的值,不需要重启数据库便可生效 。提供的审计配置项 开关见下页表格。
3) 审计总开关参数修改:
开启 :
gs_guc set -Z coordinator -Z datanode -N all -I all -c "audit_enabled = on"
关闭 :
gs_guc set -Z coordinator -Z datanode -N all -I all -c "audit_enabled = off"
审计项修改 ,以SELECT操作审计项参数audit_dml_state_select为例:
开启SELECT操作审计:
gs_guc set -Z coordinator -Z datanode -N all -I all -c "audit_dml_state_select = 1"
关闭SELECT操作审计:
gs_guc set -Z coordinator -Z datanode -N all -I all -c "audit_dml_state_select = 0"
5 传统审计配置管理-审计配置项参
配置项 | 审计开关 | 描述 | 默认值 |
用户登录、注销审计 | audit_login_logout | 表示开启用户登录、退出的审计功能。设置为0 表示关闭用户登录、退出的审计功能。不推荐设 置除0和7之外的值 | 7 |
数据库启动、停止、恢复和切换审计 | audit_database_process | 表示开启数据库启动、停止、恢复和切换的审计 功能 | 1 |
用户锁定和解锁审计 | audit_user_locked | 表示开启审计用户锁定和解锁功能 | 1 |
用户访问越权审计 | audit_user_violation | 表示关闭用户越权操作审计功能 | 0 |
授权和回收权限审计 | audit_grant_revoke | 表示开启审计用户权限授予和回收功能 | 1 |
对用户操作进行全量审计 | full_audit_users | 表示采用默认配置,未配置全量审计用户 | 空字符串 |
不需要审计的客户端名称及IP地址 | no_audit_client | 表示采用默认配置,未将客户端及IP加入审计黑 名单。 | 空字符串 |
数据库对象的CREATE,ALTER, DROP操作审计 | audit_system_object | 表示只对DATABASE 、SCHEMA 、USER 、 DATA SOURCE 、NODE GROUP这五类数据库对象的 CREATE 、ALTER 、DROP操作进行审计 | 67121159 |
具体表的INSERT 、 UPDATE和DELETE操 作审计 | audit_dml_state | 表示关闭具体表的DML操作(SELECT除外)审计 功能 | 0 |
SELECT操作审计 | audit_dml_state_select | 表示关闭SELECT操作审计功能 | 0 |
COPY审计 | audit_copy_exec | 表示打开COPY操作审计功能 | 1 |
存储过程和自定义函数的执行 审计 | audit_function_exec | 表示不记录存储过程和自定义函数的执行 审计日志 | 0 |
SET审计 | audit_set_parameter | 表示记录SET操作审计日志 | 1 |
执行白名单内的系统函数审计 | audit_system_function_ exec | 表示不记录执行系统函数的审计日志 | 0 |
事务ID记录 | audit_xid_info | 表示关闭审计日志记录事务ID功能 | 0 |
内部工具连接及操作审计、DN上对来自CN的登入登出审 计 | audit_internal_event | 表示不对内部工具cm_agent 、gs_clean 、 WDRXdb的登入登出及操作进行审计、 DN 上不对来自CN的登入登出进行审计 | off |
6 传统审计-SQL函数接口
1) 用户可以通过数据库提供的SQL函数接口查看和删除审计日志。
2)查看、删除审计日志需要具有AUDIT ADMIN属性(审计管理员)的用户或初始用户进行操作。
接口原型 | 参数 | 返回值 | 使用示例 |
pg_query_audit(timestamptz startime,timestamptz endtime,audit_log) ; |
starttime:查看审计记录的开始时间 endtime:查看审计记录的结束时间 audit_log: 所查看的审计日志信息所在 的物理文件路径 |
见下表 | 查看2024-03-06 00:00:00至2024-03-06 12:00:00时间段内audit_user用户 的SELECT操作审计记录,并按时间排序: select * from pg_query_audit('2024-03-06 00:00:00','2024-03-06 12:00:00') where type = 'dml_action_select' and username = 'audit_user' order by time desc; |
pg_delete_audit(timestamptz startime,timestamptz endtime) ; |
starttime:删除审计记录的开始时间 endtime:删除审计记录的结束时间 |
空 | 删除2024-03-06 00:00:00至2024-03-06 12:00:00时间段内的审计记录: select * from pg_delete_audit('2024-03-06 00:00:00','2024-03-06 12:00:00'); |
7 传统审计-日志管理策略
1)数据库提供配置项供用户配置审计日志的管理策略:比如审计日志存放路径等,审计记录占用空 间大小限制,审计文件个数限制,单个审计文件大小限制等,具体见下表。
2)数据库会根据审计日志管理配置项参数,对审计日志进行管理。
配置项 |
含义 |
默认值 |
audit_directory |
审计文件的存储目录 |
$GAUSSLOG/pg_audit |
audit_rotation_interval |
创建一个新审计日志文件的时间间隔,当距离上次创建一个审计 日志的时间超过了此参数值时,将生成一个新的审计日志文件 |
1天 |
audit_rotation_size |
审计日志文件的最大容量。当审计日志消息的总量超过此参数值 时,将生成一个新的审计日志文件 |
10MB |
audit_resource_policy |
审计日志的保存策略 |
on |
audit_space_limit |
审计文件占用的磁盘空间总量 |
1GB |
audit_file_remain_time |
审计日志文件的最小保存时间。 |
90 |
audit_file_remain_threshold |
审计目录下审计文件的最大数量 |
1048576 |