【openGauss数据库】--审计项配置&审计日志维护

  • 🔻 一、openGauss数据库审计
  • 🔰 1.1 关于openGauss审计功能
  • 🔰 1.2 openGauss审计功能开启
  • 🔰 1.3 配置具体的审计项
  • 🔻 二、查看审计结果
  • 🔻 三、维护审计日志
  • 🔰 3.1 审计日志相关配置参数
  • 🔰 3.2 记录审计内容的方式
  • 🔰 3.3 审计日志的维护
  • ⛳ 3.3.1 设置自动删除审计日志
  • ⛳ 3.3.2 手动备份审计文件
  • ⛳ 3.3.3 手动删除审计日志
  • 🔻 四、总结—温故知新


🔻 一、openGauss数据库审计

数据库安全对数据库系统来说至关重要。openGauss将用户对数据库的所有操作写入审计日志

数据库安全管理员可以利用这些日志信息,重现导致数据库现状的一系列事件,找出非法操作的用户、时间和内容等

🔰 1.1 关于openGauss审计功能

🌳1、审计总开关audit_enabled支持动态加载。在数据库运行期间修改该配置项的值会立即生效,无需重启数据库。默认值为on,表示开启审计功能。

🌳2、除了审计总开关,各个审计项也有对应的开关。只有开关开启,对应的审计功能才能生效。

🌳3、各审计项的开关支持动态加载。在数据库运行期间修改审计开关的值,不需要重启数据库便可生效。

openGauss数据库审计项

描述

用户登录、注销审计

参数:audit_login_logout,默认值为7,表示开启用户登录、退出的审计功能。设置为0表示关闭用户登录、退出的审计功能。不推荐设置除0和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,默认值为67121159,表示只对DATABASE、SCHEMA、USER、DATA SOURCE这四类数据库对象的CREATE、ALTER、DROP操作进行审计。

具体表的INSERT、UPDATE和DELETE操作审计

参数:audit_dml_state,默认值为0,表示关闭具体表的DML操作(SELECT除外)审计功能。

SELECT操作审计

参数:audit_dml_state_select,默认值为0,表示关闭SELECT操作审计功能。

COPY审计

参数:audit_copy_exec,默认值为1,表示开启copy操作审计功能。

存储过程和自定义函数的执行审计

参数:audit_function_exec,默认值为0,表示不记录存储过程和自定义函数的执行审计日志。

执行白名单内的系统函数审计

参数:audit_system_function_exec,默认值为0,表示不记录执行系统函数的审计日志。

SET审计

参数:audit_set_parameter,默认值为0,表示关闭SET审计功能。

事务ID记录

参数:audit_xid_info,默认值为0,表示关闭审计日志记录事务ID功能。

🔰 1.2 openGauss审计功能开启

###🍀1、以用户omm登录数据库节点、连接postgres数据库🍀###
[root@klgdj ~]# su - omm

[omm@klgdj ~]$ gsql -d postgres -p 15400

###🍀或者使用下面任一命令连接数据库

[omm@klgdj ~]$ gsql postgres://omm:omm用户密码@127.0.0.1:端口号/postgres -r
[omm@klgdj ~]$ gsql -d "host=127.0.0.1 port=端口号 dbname=postgres user=omm password=omm用户密码"


###🍀2、检查审计总开关audit_enabled状态🍀###
###🍀用show命令显示审计总开关audit_enabled的值🍀###

openGauss=# SHOW audit_enabled;
 audit_enabled 
---------------
 on
(1 row)

openGauss=# 

###🍀3、如果显示为off,执行‘\q’命令退出数据库🍀###

openGauss=# \q

###🍀4、开启审计功能,参数设置立即生效🍀###
取值范围:布尔型
on表示启动审计功能。
off表示关闭审计功能。

[omm@klgdj ~]$ gs_guc set -N all -I all -c "audit_enabled=on"

🔰 1.3 配置具体的审计项

🌳1、只有开启审计功能,用户的操作才会被记录到审计文件中

🌳2、各审计项的默认参数都符合安全标准,可以根据需要开启其他审计功能,但会对性能有一定影响

###💯1、开启对数据库所有对象的增删改操作的审计开关###

[omm@klgdj ~]$ gs_guc reload -N all -I all -c "audit_system_object=12295"

----其中audit_system_object代表对数据库所有对象的增删改操作的审计开关,12295为该审计开关的值。
###💯2、开启用户访问越权审计###

[omm@klgdj ~]$ gs_guc reload -N all -I all -c "audit_user_violation=1"

----其中audit_user_violation代表审计项开关,
取值范围: 整型,0(关闭)、1(开启)。
###💯3、开启具体表的INSERT、UPDATE和DELETE操作审计###

[omm@klgdj ~]$ gs_guc reload -N all -I all -c "audit_dml_state=1"

----其中audit_dml_state参数取值范围:整型,0、1。
0表示关闭具体表的DML操作(SELECT除外)审计功能。
1表示开启具体表的DML操作(SELECT除外)审计功能。

------其他审计配置项的设置方法类似。根据参数值设置即可,但会对性能有一定影响

🔻 二、查看审计结果

前置条件:

🌳1、审计功能总开关已开启。需要审计的审计项开关已开启。

🌳2、数据库正常运行,并且对数据库执行了一系列增、删、改、查操作,保证在查询时段内有审计结果产生。

🌳3、数据库各个节点审计日志单独记录。

🌳4、只有拥有AUDITADMIN属性的用户才可以查看审计记录。

审计查询命令是数据库提供的sql函数pg_query_audit

pg_query_audit(timestamptz startime,timestamptz endtime,audit_log)

其中,参数startimeendtime分别表示审计记录的开始时间和结束时间,audit_log表示所查看的审计日志信息所在的物理文件路径,当不指定audit_log时,默认查看连接当前实例的审计日志信息

###🍀omm用户登录、查询审计记录🍀###
openGauss=# select * from pg_query_audit('2023-06-10 08:00:00','2023-06-22 23:00:00');

mysql binlog数据库审计方案 数据库审计配置_审计日志维护

time          |      type      | result | userid | username  | database  |     client_conninfo     |    object_name    |	detail_info	|     node_name     |            thread_id            | local_port | remote_port
------------------------+----------------+--------+--------+-----------+-----------+-------------------------+-------------------+--------------+-------------------+---------------------------------+------------+-------------
2023-06-18 16:36:03+08 | login_success  | ok     | 10     | omm       | postgres  | gs_ctl@192.168.181.71     | postgres    | login db(postgres) success,t
he current user is:omm, SSL=off                                                     | dn_6001   | 139918693103360@740392563434480 | 15401      | 43406

该条记录表明,用户omm在2023-06-18 16:36:03+08时间点登录数据库postgres。
其中client_conninfo字段在log_hostname启动且IP连接时,字符@后显示反向DNS查找得到的主机名。
SSL=on表示客户端通过SSL连接,SSL=off表示客户端没有通过SSL连接。

🔻 三、维护审计日志

🔰 3.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

审计日志删除命令为数据库提供的sql函数pg_delete_audit

pg_delete_audit(timestamp startime,timestamp endtime)

其中,参数startime和endtime分别表示审计记录的开始时间和结束时间。

🔰 3.2 记录审计内容的方式

方式

优点

缺点

记录到表中

不需要用户维护审计日志

由于表是数据库的对象,如果一个数据库用户具有一定的权限,就能够访问到审计表。如果该用户非法操作审计表,审计记录的准确性难以得到保证。

记录到OS文件中

比较安全,即使一个帐户可以访问数据库,但不一定有访问OS这个文件的权限

需要用户维护审计日志

从数据库安全角度出发,openGauss采用记录到OS文件的方式来保存审计结果,保证了审计结果的可靠性。

🔰 3.3 审计日志的维护

⛳ 3.3.1 设置自动删除审计日志

审计文件占用的磁盘空间或者审计文件的个数超过指定的最大值时,系统将删除最早的审计文件,并记录审计文件删除信息到审计日志中。

审计文件占用的磁盘空间大小默认值为1024MB,可以根据磁盘空间大小重新设置参数。

###🍀1、以用户omm登录数据库节点、连接postgres数据库🍀###
[root@klgdj ~]# su - omm

[omm@klgdj ~]$ gsql -d postgres -p 15400

###🍀2、配置审计文件占用磁盘空间的大小(audit_space_limit)🍀###
###🍀查看已配置的参数🍀###
openGauss=# SHOW audit_space_limit;
 audit_space_limit 
-------------------
 1GB
(1 row)

openGauss=# 

###🍀如果显示结果不为1GB(1024MB),执行“\q”命令退出数据库🍀###
###🍀3、设置audit_space_limit参数成默认值1024MB🍀###
[omm@klgdj ~]$ gs_guc reload -N all -I all -c "audit_space_limit=1024MB"


###🍀4、配置审计文件个数的最大值(audit_file_remain_threshold)🍀###
###🍀查看已配置的参数🍀###
openGauss=# SHOW audit_file_remain_threshold;
 audit_file_remain_threshold 
-----------------------------
 1048576
(1 row)

openGauss=# 

###🍀如果显示结果不为1048576,执行“\q”命令退出数据库🍀###
###🍀5、设置audit_file_remain_threshold参数值成默认值1048576🍀###
[omm@klgdj ~]$ gs_guc reload -N all -I all -c "audit_file_remain_threshold=1048576"
⛳ 3.3.2 手动备份审计文件

当审计文件占用的磁盘空间或者审计文件的个数超过配置文件指定的值时,系统将会自动删除较早的审计文件,因此需要周期性地对比较重要的审计日志进行保存。

###🍀1、使用show命令获得审计文件所在目录(audit_directory)🍀###
openGauss=# SHOW audit_directory;
          audit_directory          
-----------------------------------
 /var/log/omm/omm/pg_audit/dn_6001
(1 row)

openGauss=# 

###🍀2、将审计目录整个拷贝出来进行保存🍀###

mysql binlog数据库审计方案 数据库审计配置_mysql binlog数据库审计方案_02

⛳ 3.3.3 手动删除审计日志

当不再需要某时段的审计记录时,可以使用审计接口命令pg_delete_audit进行手动删除。

###💯 删除2023-06-18到2023-06-22之间的审计记录###
openGauss=# SELECT pg_delete_audit('2023-06-18 00:00:00','2023-06-22 23:59:59');
 pg_delete_audit 
-----------------
 
(1 row)

openGauss=#

🔻 四、总结—温故知新

❓ openGauss数据库---审计功能、有关审计参数详解
❓ openGauss数据库---审计功能开启和关闭
❓ openGauss数据库---配置有关具体审计项
❓ openGauss数据库---审计结果查看
❓ openGauss数据库---审计日志相关参数配置
❓ openGauss数据库---审计日志维护(自动删除、手动删除、审计日志备份)