背景信息
数据库安全对数据库系统来说至关重要。openGauss将用户对数据库的所有操作写入审计日志。数据库安全管理员可以利用这些日志信息,重现导致数据库现状的一系列事件,找出非法操作的用户、时间和内容等。
关于审计功能,用户需要了解以下几点内容:
- 1.0.0 版本引入审计功能
- 审计总开关
audit_enabled
支持动态加载。在数据库运行期间修改该配置项的值会立即生效,无需重启数据库。默认值为on,表示开启审计功能。 - 除了审计总开关,各个审计项也有对应的开关。只有开关开启,对应的审计功能才能生效。
- 各审计项的开关支持动态加载。在数据库运行期间修改审计开关的值,不需要重启数据库便可生效。
涉及的参数
参数 | 默认值(V5) | 取值范围 | 参数说明 | 引入版本(默认值) |
---|---|---|---|---|
audit_enabled | on | on(开启)/off(关闭) | 控制审计进程的开启和关闭。 | |
audit_directory | pg_audit | 审计文件的存储目录。一个相对于数据目录data的路径,可自行指定。 | 1.0.1 | |
audit_data_format | binary | binary | 审计日志文件的格式。当前仅支持二进制格式。 | 1.0.1 |
audit_rotation_interval | 1d(1440) | 1~INT_MAX/60,单位为min | 指定创建一个新审计日志文件的时间间隔。 | |
audit_rotation_size | 10MB(10240) | 1024~1048576,单位为KB | 指定审计日志文件的最大容量。 | |
audit_file_remain_threshold | 1048576 | 100~1048576 | 审计目录下审计文件个数的最大值 | |
audit_thread_num | 1 | 1~48 | 审计线程的个数 | 3.0.0 |
审计日志的保存策略 | ||||
audit_resource_policy | on | on: 空间优先,audit_space_limit | 控制审计日志的保存策略,以空间(on)还是时间(off)限制为优先策略。 | |
off: 时间优先,audit_file_remain_time | ||||
audit_file_remain_time | 90 | 0~730,单位为day,0表示无时间限制 | 表示需记录审计日志的最短时间要求,该参数在audit_resource_policy 为off时生效。 |
|
audit_space_limit | 1GB(1048576) | 1024KB~1024GB,单位为KB | 审计文件占用的磁盘空间总量。 | |
用户和权限审计 | ||||
audit_login_logout | 7 | 0表示关闭用户登录、注销审计功能 | 是否审计openGauss用户的登录(包括登录成功和登录失败)、注销。 | |
1表示只审计用户登录成功 | ||||
2表示只审计用户登录失败 | ||||
3表示只审计用户登录成功和失败 | ||||
4表示只审计用户注销 | ||||
5表示只审计用户注销和登录成功 | ||||
6表示只审计用户注销和登录失败 | ||||
7表示审计用户登录成功、失败和注销 | ||||
audit_database_process | 1 | 0(关闭)/1(开启) | 是否对openGauss的启动、停止、切换和恢复进行审计 | |
audit_user_locked | 1 | 0(关闭)/1(开启) | 是否审计openGauss用户的锁定和解锁 | |
audit_user_violation | 0 | 0(关闭)/1(开启) | 是否审计用户的越权访问操作 | |
audit_grant_revoke | 1 | 0(关闭)/1(开启) | 是否审计openGauss用户权限授予和回收的操作 | |
full_audit_users | 空字符串 | 多个用户名需使用逗号分隔 | 用于配置全量审计用户列表,对列表中的用户执行的所有可被审计的操作记录审计日志。 | 5.0.0 |
no_audit_client | 空字符串 | 多个配置项需使用逗号分隔 | 用于配置不需要审计的客户端名称及IP地址列表。 | 5.0.0 |
操作审计 | ||||
audit_system_object | 67121159 | 0~67108863 | 是否对openGauss数据库对象的CREATE、DROP、ALTER操作进行审计。 | [1.0.0 - 3.0.0](12295) |
0(关闭)/具体配置参考官方文档 | openGauss数据库对象包括DATABASE、USER、schema、TABLE等。 | |||
audit_dml_state | 0 | 0(关闭)/1(开启) | 是否对具体表的INSERT、UPDATE、DELETE操作进行审计。 | |
audit_dml_state_select | 0 | 0(关闭)/1(开启) | 是否对SELECT操作进行审计 | |
audit_function_exec | 0 | 0(关闭)/1(开启) | 在执行存储过程、匿名块或自定义函数(不包括系统自带函数)时是否记录审计信息。 | |
audit_system_function_exec | 0 | 0(关闭)/1(开启) | 决定在执行白名单内的系统函数时是否记录审计日志。 | 5.0.0 |
audit_copy_exec | 1 | 0(关闭)/1(开启) | 是否对COPY操作进行审计,从V1.1.0开始默认开启。 | [1.0.0-1.0.1](0) |
audit_set_parameter | 0 | 0(关闭)/1(开启) | 是否对SET操作进行审计。 | [1.0.0 - 3.0.0](1) |
audit_xid_info | 0 | 0(关闭)/1(开启) | 是否在审计日志字段detail_info中记录SQL语句的事务ID。 | 3.0.0 |
其他安全相关参数(SSL) | ||||
ssl | off | on(启用)/off(不启用) | 指定是否启用SSL连接。 | |
require_ssl | off | on(强制)/off(不强制) | 指定服务器端是否强制要求SSL连接。 | |
ssl_ciphers | ALL | 分号分割多个加密算法 | 指定SSL支持的加密算法列表。参见用SSL进行安全的TCP/IP连接获取支持的加密算法。 | 1.0.1 |
ssl_cert_file | server.crt | 指定包含SSL服务器证书的文件的名称,其相对路径是相对于数据目录的。 | ||
ssl_key_file | server.key | 指定包含SSL私钥的文件名称,其相对路径是相对于数据目录的。 | ||
ssl_ca_file | 指定包含CA信息的文件的名称,其相对路径是相对于数据目录的。 | |||
ssl_crl_file | 指定包含CRL信息的文件的名称。必须使用相对路径,相对路径是相对于数据目录的。 | |||
ssl_cert_notify_time | 90 | 7~180 | SSL服务器证书到期前提醒的天数。 | 1.1.0 |
ssl_renegotiation_limit | 0 | 0~2147483647,单位为KB。0表示禁用重新协商机制。 | 在会话密钥重新协商之前,通过SSL加密通道可以传输的流量。 | |
其他安全相关参数(password) | ||||
password_policy | 1 | 0(关闭)/1(开启) | 指定是否进行密码复杂度检查。关于密码复杂度检查策略请参见设置密码安全策略。 | |
password_reuse_time | 60 | 0~3650,单位是天,0表示不检查 | 指定是否对新密码进行可重用天数检查。 | |
password_reuse_max | 0 | 0~1000,0表示不检查 | 指定是否对新密码进行可重用次数检查。 | 1.0.1 |
password_lock_time | 1 | 0~365,单位是天,0:不自动解锁 | 指定帐户被锁定后自动解锁的时间。 | |
failed_login_attempts | 10 | 0~1000,0表示不锁定 | 如果输入密码错误的次数达到此参数值时,当前帐户被锁定。 | 1.1.0 |
password_encryption_type | 2 | 0表示采用md5方式对密码加密。 | 指定采用何种加密方式对用户密码进行加密存储。 | |
1表示采用sha256和md5两种方式分别对密码加密。 | ||||
2表示采用sha256方式对密码加密。 | ||||
3表示采用sm3方式对密码加密。 | ||||
password_min_uppercase | 0 | 0~999,0表示没有限制 | 密码中至少需要包含大写字母的个数。 | 1.0.1 |
password_min_lowercase | 0 | 0~999,0表示没有限制 | 密码中至少需要包含小写字母的个数。 | 1.0.1 |
password_min_digital | 0 | 0~999,0表示没有限制 | 密码中至少需要包含数字的个数。 | 1.0.1 |
password_min_special | 0 | 0~999,0表示没有限制 | 密码中至少需要包含特殊字符的个数。 | 1.0.1 |
password_min_length | 8 | 6~999 | 密码的最小长度。 | 1.0.1 |
password_max_length | 32 | 6~999 | 密码的最大长度。 | 1.0.1 |
password_effect_time | 90 | 0~999,单位是天,0表示不开启 | 密码的有效期限。 | |
password_notify_time | 7 | 0~999,单位是天,0表示不开启 | 密码到期提醒的天数。 | |
其他安全相关参数 | ||||
enableSeparationOfDuty | off | on(启用)/off(不启用) | 指定是否开启三权分立。 | |
session_timeout | 600 | 0-86400,最小单位为s,0表示关闭 | 建立连接会话后,如果超过此参数的设置时间,则会自动断开连接。 | |
auth_iteration_count | 10000 | 2048-134217728 | 认证加密信息生成过程中使用的迭代次数。 |
须知:
-
请不要随意调整
audit_rotation_interval
、audit_rotation_size
和audit_file_remain_threshold
参数,否则可能会导致audit_resource_policy
无法生效,如果需要控制审计日志的存储空间和时间,请使用audit_resource_policy
、audit_space_limit
和audit_file_remain_time
参数进行控制。 -
当
audit_dml_state
开关打开且在高性能场景下,建议增大audit_thread_num
参数保证审计消息可以被及时处理和记录。 -
audit_system_object
参数的值由26个二进制位的组合求出,这26个二进制位分别代表openGauss的26类数据库对象。如果对应的二进制位取值为0,表示不审计对应的数据库对象的CREATE、DROP、ALTER操作;取值为1,表示审计对应的数据库对象的CREATE、DROP、ALTER操作。 -
如果开启
audit_xid_info
,审计日志中detail_info信息则以xid开始,例如:detail_info: xid=14619 , create table t1(id int); -- 对于不存在事务ID的审计行为,记录xid=NA。
-
在 V5.0.0 版本引入参数
no_audit_client
,数据库服务端内部工具或节点之间通信也会产生审计日志,针对这些风险较低的审计场景的可以通过配置no_audit_client
参数不记录审计,以节约审计日志占用空间,提升审计日志查询性能,参数格式为:客户端名称@IP,同pg_query_audit
函数中的client_conninfo
字段,例如 “cm_agent@127.0.0.1, gs_clean@127.0.0.1”。 -
在 V5.0.0 版本引入参数
full_audit_users
,当执行的 SQL 语句同时满足full_audit_users
和no_audit_client
参数配置时,以no_audit_client
配置优先,不记录审计日志。 -
在 V5.0.0 版本引入参数
audit_system_function_exec
支持记录审计的系统函数白名单如下表所示:系统函数 说明 引入版本 官方文档未找到说明的函数 gs_download_obs_file 2.1.0 gs_get_hadr_key_cn 2.1.0 gs_hadr_do_switchover 2.1.0 gs_pitr_archive_slot_force_advance 3.0.0 gs_pitr_clean_history_global_barriers 3.0.0 gs_set_obs_delete_location 1.1.0 gs_set_obs_delete_location_with_slotname 2.1.0 gs_set_obs_file_context 2.1.0 gs_streaming_dr_in_switchover 3.0.0 gs_upload_obs_file 2.1.0 pg_cancel_session 2.1.0 pg_create_physical_replication_slot_extern 1.1.0 备份恢复控制函数 gs_roach_disable_delay_ddl_recycle 关闭延迟DDL功能,并返回本次延迟DDL生效的日志范围,并删除该范围内被用户删除的列存表物理文件。 1.1.0 gs_roach_enable_delay_ddl_recycle 开启延迟DDL功能,并返回开启点的日志位置。 1.1.0 gs_roach_stop_backup 停止一个内部备份工具 GaussRoach 开启的备份。 1.1.0 gs_roach_switch_xlog 切换当前使用的日志段文件,并且,如果 request_ckpt 为 true,则触发一个全量检查点。 1.1.0 pg_cbm_get_merged_file 用于将指定 lsn 范围之内的 cbm 文件合并成一个 cbm 文件,并返回合并完的 cbm 文件名。 pg_cbm_recycle_file 删除不再使用的 cbm 文件,并返回删除后的第一条 lsn。 pg_cbm_rotate_file 等待 cbm 解析到 rotate_lsn 之后,强制切换文件,在 build 期间调用。 1.1.0 pg_create_restore_point 为执行恢复创建一个命名点。 pg_disable_delay_ddl_recycle 关闭延迟 DDL 功能,并返回本次延迟 DDL 生效的 xlog 范围。 pg_enable_delay_ddl_recycle 开启延迟 DDL 功能,并返回开启点的 xlog 位置。 pg_last_xlog_receive_location 获取最后接收事务日志的位置并通过流复制将其同步到磁盘。 pg_start_backup 开始执行在线备份。 pg_stop_backup 完成执行在线备份。 pg_switch_xlog 切换到一个新的事务日志文件。 pg_xlog_replay_pause 立即暂停恢复。 pg_xlog_replay_resume 如果恢复处于暂停状态,则重新启动。 逻辑复制函数 pg_create_logical_replication_slot 创建逻辑复制槽。 pg_drop_replication_slot 删除流复制槽。 pg_logical_slot_get_binary_changes 以二进制格式解码并推进流复制槽。 pg_logical_slot_get_changes 解码并推进流复制槽。 pg_logical_slot_peek_changes 解码并不推进流复制槽。 pg_replication_origin_advance 将给定节点的复制进度设置为给定的位置。这主要用于设置初始位置,或在配置更改或类似的变更后设置新位置。 3.0.0 pg_replication_origin_create 用给定的外部名称创建一个复制源,并且返回分配给它的内部ID。 3.0.0 pg_replication_origin_drop 删除一个以前创建的复制源,包括任何相关的重放进度。 3.0.0 pg_replication_origin_session_progress 返回当前会话中选择的复制源的重放位置。 3.0.0 pg_replication_origin_session_reset 取消 pg_replication_origin_session_setup() 的效果。 3.0.0 pg_replication_origin_session_setup 将当前会话标记为从给定的原点回放,从而允许跟踪回放进度。 3.0.0 pg_replication_origin_xact_reset 取消 pg_replication_origin_xact_setup() 的效果。 3.0.0 pg_replication_origin_xact_setup 将当前事务标记为重放在给定LSN和时间戳上提交的事务。 3.0.0 pg_replication_slot_advance 直接推进流复制槽到指定LSN,不输出解码结果。 咨询锁函数 pg_advisory_lock 获取排它咨询锁。 pg_advisory_lock_shared 获取共享咨询锁。 pg_advisory_unlock 释放排它咨询锁。 pg_advisory_unlock_all 释放当前会话持有的所有咨询锁。 pg_advisory_unlock_shared 释放共享咨询锁。 pg_advisory_xact_lock 获取事务级别的排它咨询锁。 pg_advisory_xact_lock_shared 获取事务级别的共享咨询锁。 pg_try_advisory_lock 尝试获取会话级排它咨询锁。 pg_try_advisory_lock_shared 尝试获取会话级共享咨询锁。 pg_try_advisory_xact_lock 尝试获取事务级别的排它咨询锁。 pg_try_advisory_xact_lock_shared 尝试获取事务级别的共享咨询锁。 服务器信号函数 pg_cancel_backend 取消一个后端的当前查询。 pg_reload_conf 导致所有服务器进程重新装载它们的配置文件。 pg_rotate_logfile 滚动服务器的日志文件。 pg_terminate_backend 终止一个后台线程。 pg_terminate_session 终止一个后台session。 段页式存储函数 gs_space_shrink 当前节点上对指定段页式空间做物理空间收缩。 2.1.0 local_space_shrink 当前节点上对指定段页式空间做物理空间收缩。 2.1.0 pg_free_remain_segment 释放指定的残留 extent。 2.1.0 数据损坏检测修复函数 gs_repair_file 数据损坏修复文件函数。 3.0.0 gs_repair_page 修复本实例指定页面。 3.0.0 local_clear_bad_block_info 清理 local_bad_block_info 中已修复页面的数据,也就是 repair_time 不为空的信息。 3.0.0 配置设置函数 set_config 设置参数并返回新值。 set_working_grand_version_num_manually 通过切换授权版本号来更新和升级数据库的新特性。 故障注入系统函数 gs_fault_inject 故障注入系统函数。
V1.0.0 – V3.0.0 audit_system_object
默认值是 12295 = 11000000000111,V3.0.3以及以上版本默认值改为67121159= 100000000000011000000000111
audit_system_object
取值含义说明:
二进制位 | 含义 | 取值说明 | 引入版本(默认值) |
---|---|---|---|
第0位 | 是否审计 DATABASE 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第1位 | 是否审计 SCHEMA 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第2位 | 是否审计 USER 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第3位 | 是否审计 TABLE 对象的CREATE、DROP、ALTER、TRUNCATE操作。 | 0(不审计)/1(审计) | |
第4位 | 是否审计 INDEX 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第5位 | 是否审计 VIEW/MATVIEW 对象的CREATE、DROP操作。 | 0(不审计)/1(审计) | |
第6位 | 是否审计 TRIGGER 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第7位 | 是否审计 PROCEDURE/FUNCTION 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第8位 | 是否审计 TABLESPACE 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第9位 | 是否审计 RESOURCE POOL 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第10位 | 是否审计 WORKLOAD 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第11位 | V3.0.0 开始作为保留位,V1.0.0 - V2.1.0 审计 SERVER FOR HADOOP 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第12位 | 是否审计 DATA SOURCE 对象的CRAETE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第13位 | V3.0.0 开始作为保留位,V1.0.0 - V2.1.0 审计 NODE GROUP 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第14位 | 是否审计 ROW LEVEL SECURITY 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第15位 | 是否审计 TYPE 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第16位 | 是否审计 TEXT SEARCH 对象(CONFIGURATION和DICTIONARY)的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第17位 | 是否审计 DIRECTORY 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第18位 | 是否审计 SYNONYM 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | |
第19位 | 是否审计 SEQUENCE 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | 1.1.0(0) |
第20位 | 是否审计 CMK、CEK 对象的CREATE、DROP操作。 | 0(不审计)/1(审计) | 2.0.0(0) |
第21位 | 是否审计 PACKAGE 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | 3.0.0(0) |
第22位 | 是否审计 MODEL 对象的CREATE、DROP操作。 | 0(不审计)/1(审计) | 3.0.0(0) |
第23位 | 是否审计 PUBLICATION和SUBSCRIPTION 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | 3.0.0(0) |
第24位 | 是否审计对 gs_global_config 全局对象的ALTER、DROP操作。 | 0(不审计)/1(审计) | 3.0.0(0) |
第25位 | 是否审计 FOREIGN DATA WRAPPER 对象的CREATE、DROP、ALTER操作。 | 0(不审计)/1(审计) | 3.0.0(0) |
第26位 | 是否审计 SQL PATCH 对象的CREATE、ENABLE、DISABLE、DROP操作。 | 0(不审计)/1(审计) | 3.0.0(0) |
查询参数配置:
MogDB=> select name,setting,boot_val,context from pg_settings where name like '%audit%';
name | setting | boot_val | context
-----------------------------+----------+----------+------------
audit_copy_exec | 1 | 1 | sighup
audit_data_format | binary | binary | postmaster
audit_database_process | 1 | 1 | sighup
audit_directory | pg_audit | pg_audit | postmaster
audit_dml_state | 0 | 0 | sighup
audit_dml_state_select | 0 | 0 | sighup
audit_enabled | on | on | sighup
audit_file_remain_threshold | 1048576 | 1048576 | sighup
audit_file_remain_time | 90 | 90 | sighup
audit_function_exec | 0 | 0 | sighup
audit_grant_revoke | 1 | 1 | sighup
audit_login_logout | 7 | 7 | sighup
audit_resource_policy | on | on | sighup
audit_rotation_interval | 1440 | 1440 | sighup
audit_rotation_size | 10240 | 10240 | sighup
audit_set_parameter | 0 | 0 | sighup
audit_space_limit | 1048576 | 1048576 | sighup
audit_system_function_exec | 0 | 0 | sighup
audit_system_object | 67121159 | 67121159 | sighup
audit_thread_num | 1 | 1 | postmaster
audit_user_locked | 1 | 1 | sighup
audit_user_violation | 0 | 0 | sighup
audit_xid_info | 0 | 0 | sighup
full_audit_users | | | sighup
no_audit_client | | | sighup
(25 rows)
MogDB=> select name,setting,boot_val,context from pg_settings where name like '%ssl%';
name | setting | boot_val | context
-------------------------+------------+------------+------------
dcf_ssl | on | on | postmaster
require_ssl | off | off | sighup
ss_enable_ssl | on | on | postmaster
ssl | off | off | postmaster
ssl_ca_file | | | postmaster
ssl_cert_file | server.crt | server.crt | postmaster
ssl_cert_notify_time | 90 | 90 | sighup
ssl_ciphers | ALL | ALL | postmaster
ssl_crl_file | | | postmaster
ssl_key_file | server.key | server.key | postmaster
ssl_renegotiation_limit | 0 | 0 | user
(11 rows)
MogDB=> select name,setting,boot_val,context from pg_settings where name like 'password%';
name | setting | boot_val | context
--------------------------+---------+----------+---------
password_effect_time | 90 | 90 | sighup
password_encryption_type | 0 | 2 | sighup
password_lock_time | 1 | 1 | sighup
password_max_length | 32 | 32 | sighup
password_min_digital | 0 | 0 | sighup
password_min_length | 8 | 8 | sighup
password_min_lowercase | 0 | 0 | sighup
password_min_special | 0 | 0 | sighup
password_min_uppercase | 0 | 0 | sighup
password_notify_time | 7 | 7 | sighup
password_policy | 1 | 1 | sighup
password_reuse_max | 0 | 0 | sighup
password_reuse_time | 60 | 60 | sighup
(13 rows)
MogDB=> select name,setting,boot_val,context from pg_settings where name in ('failed_login_attempts','enableSeparationOfDuty','session_timeout','auth_iteration_count');
name | setting | boot_val | context
------------------------+---------+----------+------------
auth_iteration_count | 10000 | 10000 | sighup
enableSeparationOfDuty | off | off | postmaster
failed_login_attempts | 10 | 10 | sighup
session_timeout | 600 | 600 | user
(4 rows)
查看审计结果
-
只有拥有
AUDITADMIN
属性的用户才可以查看审计记录。 -
审计查询命令是数据库提供的sql函数
pg_query_audit
,其原型为:pg_query_audit(timestamptz startime,timestamptz endtime,audit_log)
参数
startime
和endtime
分别表示审计记录的开始时间和结束时间,audit_log
表示所查看的审计日志信息所在的物理文件路径,当不指定audit_log
时,默认查看连接当前实例的审计日志信息。
MogDB=# select * from pg_query_audit('2023-03-30 21:00:00','2023-03-30 21:30:00') limit 1;
-[ RECORD 1 ]---+------------------------------------------------------------
time | 2023-03-30 21:00:41+08
type | login_success
result | ok
userid | 10
username | omm
database | postgres
client_conninfo | gs_clean@127.0.0.1
object_name | postgres
detail_info | login db(postgres) success,the current user is:omm, SSL=off
node_name | dn_6001
thread_id | 47300231235328@733496441837866
local_port | 26000
remote_port | 61692
pg_query_audit
函数返回字段如下:
名称 | 类型 | 描述 |
---|---|---|
time | timestamp with time zone | 操作时间 |
type | text | 操作类型 |
result | text | 操作结果 |
userid | oid | 用户id |
username | text | 执行操作的用户名 |
database | text | 数据库名称 |
client_conninfo | text | 客户端连接信息 |
object_name | text | 操作对象名称 |
detail_info | text | 执行操作详细信息 |
node_name | text | 节点名称 |
thread_id | text | 线程id |
local_port | text | 本地端口 |
remote_port | text | 远端端口 |
维护审计日志
1. 自动维护审计日志(参数)
配置项 | 含义 | 默认值 |
---|---|---|
audit_directory | 审计文件的存储目录。 | /var/log/gaussdb/用户名/pg_audit |
audit_resource_policy | 审计日志的保存策略。 | on(表示使用空间配置策略) |
audit_space_limit | 审计文件占用的磁盘空间总量。 | 1GB |
audit_file_remain_time | 审计日志文件的最小保存时间。 | 90 |
audit_file_remain_threshold | 审计目录下审计文件的最大数量。 | 1048576 |
2. 审计日志保存方式
方式 | 优点 | 缺点 |
---|---|---|
记录到表中 | 不需要用户维护审计日志。 | 由于表是数据库的对象,如果一个数据库用户具有一定的权限,就能够访问到审计表。如果该用户非法操作审计表,审计记录的准确性难以得到保证。 |
记录到OS文件中 | 比较安全,即使一个帐户可以访问数据库,但不一定有访问OS这个文件的权限。 | 需要用户维护审计日志。 |
- 从数据库安全角度出发,openGauss采用记录到OS文件的方式来保存审计结果,保证了审计结果的可靠性。
3. 手动备份审计文件
当审计文件占用的磁盘空间或者审计文件的个数超过配置文件指定的值时,系统将会自动删除较早的审计文件,因此建议用户周期性地对比较重要的审计日志进行保存。
-
使用show命令获得审计文件所在目录(audit_directory)。
MogDB=# SHOW audit_directory; -[ RECORD 1 ]---+-------------------------------- audit_directory | /opt/mogdb/log/pg_audit/dn_6001 [root@mogdb303 ~]# ls -lrt /opt/mogdb/log/pg_audit/dn_6001 total 86216 drwx------ 2 omm omm 6 Mar 18 19:51 done -rw------- 1 omm omm 911185 Mar 18 23:59 0_adt -rw------- 1 omm omm 5538113 Mar 20 00:00 1_adt -rw------- 1 omm omm 6269061 Mar 20 23:59 2_adt -rw------- 1 omm omm 6891460 Mar 21 23:59 3_adt -rw------- 1 omm omm 6591425 Mar 22 23:59 4_adt -rw------- 1 omm omm 5918297 Mar 23 23:59 5_adt -rw------- 1 omm omm 5890873 Mar 24 23:59 6_adt -rw------- 1 omm omm 5899505 Mar 25 23:59 7_adt -rw------- 1 omm omm 5902867 Mar 26 23:59 8_adt -rw------- 1 omm omm 5913323 Mar 27 23:59 9_adt -rw------- 1 omm omm 5599647 Mar 28 23:59 10_adt -rw------- 1 omm omm 5505477 Mar 29 23:59 11_adt -rw------- 1 omm omm 4518669 Mar 30 23:59 12_adt -rw------- 1 omm omm 16777456 Mar 31 00:00 index_table_new -rw------- 1 omm omm 81615 Mar 31 00:21 13_adt
-
将审计目录整个拷贝出来进行保存。
4. 手动删除审计日志
当不再需要某时段的审计记录时,可以使用审计接口命令 pg_delete_audit
进行手动删除,其原型为:
pg_delete_audit(timestamp startime,timestamp endtime)
以删除2023/3/29到2023/3/30之间的审计记录为例:
SELECT pg_delete_audit('2023-03-29 00:00:00','2023-03-30 23:59:59');
5. 查找能查询到的审计最早时间
# 使用min函数在一个比较大的时间范围查找审计最早时间
CMDB=# select min(time) from pg_query_audit('1970-1-1','9999-12-31');
min
------------------------
2023-02-23 08:35:01+08
(1 row)
# 查看审计日志文件大致查找
[root@mogdb303 ~]# ls -lrt /opt/mogdb/log/pg_audit/dn_6001
total 86216
drwx------ 2 omm omm 6 Mar 18 19:51 done
-rw------- 1 omm omm 911185 Mar 18 23:59 0_adt -- 2023-03-18
-rw------- 1 omm omm 5538113 Mar 20 00:00 1_adt
审计相关函数
1. 查询审计结果,pg_query_audit
如上
2. 手动删除审计日志,pg_delete_audit
如上
3. 查看登录用户的登录信息,login_audit_messages
CMDB=# \df login_audit_messages
List of functions
-[ RECORD 1 ]-------+------------------------------------------------------------------------------------------------------------------------
Schema | pg_catalog
Name | login_audit_messages
Result data type | TABLE(username text, database text, logintime timestamp with time zone, mytype text, result text, client_conninfo text)
Argument data types | flag boolean
Type | normal
fencedmode | f
propackage | f
prokind | f
-
查看上一次登录认证通过的日期、时间和IP等信息。
openGauss=> select * from login_audit_messages(true); username | database | logintime | mytype | result | client_conninfo ----------+----------+------------------------+---------------+--------+----------------- omm | openGauss | 2020-06-29 21:56:40+08 | login_success | ok | gsql@[local] (1 row)
-
查看上一次登录认证失败的日期、时间和IP等信息。
openGauss=> select * from login_audit_messages(false) ORDER BY logintime desc limit 1; username | database | logintime | mytype | result | client_conninfo ----------+----------+------------------------+--------------+--------+------------------- omm | openGauss | 2020-06-29 21:57:55+08 | login_failed | failed | [unknown]@[local] (1 row)
-
查看自从最后一次认证通过以来失败的尝试次数、日期和时间。
openGauss=> select * from login_audit_messages(false); username | database | logintime | mytype | result | client_conninfo ----------+----------+------------------------+--------------+--------+------------------- omm | openGauss | 2020-06-29 21:57:55+08 | login_failed | failed | [unknown]@[local] omm | openGauss | 2020-06-29 21:57:53+08 | login_failed | failed | [unknown]@[local] (2 rows)
4. 查看登录用户的登录信息,login_audit_messages_pid
描述:查看登录用户的登录信息。与 login_audit_messages
的区别在于结果基于当前 backendid
向前查找。所以不会因为同一用户的后续登录,而影响本次登录的查询结果。也就是查询不到该用户后续登录的信息。
CMDB=# \df login_audit_messages_pid
List of functions
-[ RECORD 1 ]-------+------------------------------------------------------------------------------------------------------------------------------------------
Schema | pg_catalog
Name | login_audit_messages_pid
Result data type | TABLE(username text, database text, logintime timestamp with time zone, mytype text, result text, client_conninfo text, backendid bigint)
Argument data types | flag boolean
Type | normal
fencedmode | f
propackage | f
prokind | f
-
查看上一次登录认证通过的日期、时间和IP等信息。
openGauss=> SELECT * FROM login_audit_messages_pid(true); username | database | logintime | mytype | result | client_conninfo | backendid ----------+----------+------------------------+---------------+--------+-----------------+----------------- omm | openGauss | 2020-06-29 21:56:40+08 | login_success | ok | gsql@[local] | 139823109633792 (1 row)
-
查看上一次登录认证失败的日期、时间和IP等信息。
openGauss=> SELECT * FROM login_audit_messages_pid(false) ORDER BY logintime desc limit 1; username | database | logintime | mytype | result | client_conninfo | backendid ----------+----------+------------------------+--------------+--------+-------------------+----------------- omm | openGauss | 2020-06-29 21:57:55+08 | login_failed | failed | [unknown]@[local] | 139823109633792 (1 row)
-
查看自从最后一次认证通过以来失败的尝试次数、日期和时间。
openGauss=> SELECT * FROM login_audit_messages_pid(false); username | database | logintime | mytype | result | client_conninfo | backendid ----------+----------+------------------------+--------------+--------+-------------------+----------------- omm | openGauss | 2020-06-29 21:57:55+08 | login_failed | failed | [unknown]@[local] | 139823109633792 omm | openGauss | 2020-06-29 21:57:53+08 | login_failed | failed | [unknown]@[local] | 139823109633792 (2 rows)