审计文件完整性校验
功能描述
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 | 远端端口 |