VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

审计文件完整性校验

功能描述

Vastbase支持审计文件的完整性校验,即在审计时存储审计信息的摘要值,读取时校验摘要值防止篡改。

  • 审计上报时,通过调用硬件加密库的生成数据摘要值接口对所有记录的审计信息生成摘要值,并在进行base64编码后随审计信息一起存入审计文件中。

  • 在读取审计信息时,读取摘要值并对读取的审计信息进行数据摘要获取新的摘要值,如果两个摘要值保持一致,则说明审计信息没有被篡改。

该功能由GUC参数audit_hash_enabled来控制。

audit_hash_enabled

参数说明:是否开启审计文件完整性校验功能。

取值范围:布尔型

  • on:表示开启审计文件完整性校验功能。

  • off:表示关闭审计文件完整性校验功能。

默认值:off

注意事项

  • 审计文件完整性校验功能只支持在数据库内部使用。

  • 使用该功能必须配置光电安辰密码卡,并配置相关的系统环境变量,具体步骤如下:

    1、配置光电安辰密码卡。

    2、获取光电安辰的硬件动态库文件(libskf.so、libsdf.so),并将库文件与数据库实例$GAUSSHOME/lib/postgresql目录下的hwcipher.so放在同一目录下(可自定义路径)。

    3、在.bashrc文件中配置如下环境变量:

    • 设置环境变量CRYPTDEV_LIBPATH为动态库所在路径(不需要包含动态库名称)。

    • 设置环境变量CRYPTDEV_TYPE=gdaccard表示使用光电安辰密码卡。

示例

前置步骤

1、服务器已安装配置光电安辰密码卡。

2、在~/.bashrc文件中配置环境变量。

vi ~/.bashrc

添加如下内容(CRYPTDEV_LIBPATH已实际路径为准):

export CRYPTDEV_TYPE=gdaccard
export CRYPTDEV_LIBPATH=/home/wzr1

3、重新加载配置文件。

source ~/.bashrc

4、启动数据库服务并连接。

vb_ctl start
vsql -r

5、修改如下参数。

alter system set audit_hash_enabled=on;
alter system set audit_enabled=on;
alter system set audit_dml_state=1;

6、清空审计日志。

cd /home/wzr1/data/vastbase/pg_audit
rm -rf *_adt 

功能使用示例

1、登录数据库。

vsql -r -d vastbase

2、创建测试表并执行DML语句。

create table tb1(id int,name varchar);
insert into tb1 values(1,'lili');
update tb1 set name='lolo' where id=1;
delete from tb1 where id=1;

3、由于审计内容较多,为了更加直观的显示,通过\x方式启用列式方式显示结果。

\x

4、使用pg_query_audit函数查看pg_audit审计日志。

select * from pg_query_audit(now()-0.1,now()) where type='dml_action';

返回结果如下:

5、打开审计文件,篡改审计文件内容。

cd /home/wzr1/data/vastbase/pg_audit
vi 1_adt

6、再次数据库查看篡改审计文件。

select * from pg_query_audit(now()-0.1,now()) where type='dml_action';

返回结果如下,查看失败:

pg_query_audit

Vastbase提供函数pg_query_audit用于查看审计日志,用法如下:

pg_query_audit(timestamptz startime,timestamptz endtime,audit_log)

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

startime和endtime的差值代表要查询的时间段,其有效值为从startime日期中的00:00:00开始到endtime日期中的23:59:59之间的任何值。请正确指定这两个参数,否则将查不到需要的审计信息。

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 远端端口