数据库审计#

本章节描述了 DB 的审计功能。

概述#

数据库安全对数据库系统来说至关重要。数据库审计是数据库安全中必不可少的部分。

数据库的审计是指追踪和记录数据库系统或者数据库当中发生的事件。

数据库审计的方式目前一般有两种:将审计条目插入数据库表和记录日志文件。DB 的审计功能采取记录日志文件的方式。

DB 审计功能目前支持:

  • 打开和关闭审计功能

  • 配置审计策略

  • 查看审计日志

  • 维护审计日志

DB 审计日志的格式:

名称

描述

类型

timestamp

时间

timestamp

username

用户

string

database name

数据库

string

remote host

ip地址

string

remote port

端口号

string

cmd

表访问类型

string

vci

虚拟集群实例(保留字段)

string

object type

审计对象类型

string

object name

审计对象(表名、视图名等)

json string

audit result

审计结果(保留字段)

enum {”SUCCESS”, “FAILED”}

audit type

审计类型

enum {”DDL”, “READ”, ”FUNCTION”, “ROLE”, “WRITE”}

affected rows

影响行数(保留字段)

int64

audit id

唯一id:由ip-db start time-session id-statement id-substatement id四部

string

statement

语句

string

cmd包括:SELECT、UPDATE、DELETE、INSERT、EXECUTE、LOCK TABLE、GRANT、CREATE TABLE、CREATE INDEX、DROP VIEW、 ROLLBACK、ALTER ROLE、CREATE LANGUAGE、CREATE TABLESPACE、ALTER DATABASE、CREATE EXTERNAL TABLE、DROP FOREIGN TABLE、 CREATE EXTENSION、SHOW、DROP ROLE、SET、DROP SCHEMA、CREATE ROLE、GRANT ROLE、CREATE FUNCTION、ANALYZE、 TRUNCATE TABLE、DROP TABLE、COMMIT、ALTER QUEUE、RESET、CREATE SCHEMA、EXPLAIN、CREATE QUEUE、BEGIN、 CREATE DATABASE、CREATE VIEW、ALTER DEFAULT PRIVILEGES、DROP TABLESPACE类型,其中execute是udf函数 object type包括:TABLE、INDEX、SEQUENCE、VIEW、FUNCTION、FOREIGN TABLE、MATERIALIZED VIEW、MISC object name和object type只有当pgaudit.log_relation=on时才输出,否则可能为空。 保留字段为空,后续版本支持。

打开和关闭审计功能#

审计功能的总开关通过参数 session_preload_librariespgaudit.log 控制,目前不支持动态加载,设置之后需要重启数据库主节点。

oushudb config -c session_preload_libraries -v pgaudit
oushudb config -c pgaudit.log -v 'READ,WRITE,DDL'
oushudb restart allmains

pgaudit.log 支持如下配置,用逗号分割:

参数

语句类型

DDL

CREATE,DROP,ALTER

FUNCTION

存储过程类

MISC

FETCH,CHECKPOINT,SET

MISC_SET

SET ROLE

READ

SELECT,COPY

ROLE

GRANT,REVOKE,CREATE/ALTER/DROP ROLE

WRITE

INSERT,UPDATE,DELETE,TRUNCATE, 向表COPY数据

NONE

关闭审计

ALL

审计全部内容

配置审计策略#

DB 支持的审计策略#

策略名称

描述

默认值

pgaudit.log_relation

开启表级别审计

TRUE,FALSE

FALSE

pgaudit.log

操作审计类型

DDL, FUNCTION, MISC, MISC_SET, READ, ROLE, WRITE, NONE

NONE

用户审计可以通过参数ALTER ROLE开启。

ALTER ROLE user1 SET pgaudit.log = 'DDL,READ';

查看审计日志#

审计日志的目录为 ${OUSHUDB_LOG_PATH}/audit, OUSHUDB_LOG_PATH 环境变量可以通过如下命令获取:

source /usr/local/oushu/oushudb/oushudb_path.sh
env ${OUSHUDB_LOG_PATH}

审计日志的文件名称为 audit-${timestamp}.csv

其中${time_stamp} 是指审计线程创建审计日志文件时获取的系统时间戳。

  • 示例

2024-06-19 040133.983,user,db,127.0.0.1,48996,SELECT,,,,,READ,,127.0.0.1-74293922-1048580-1-1,select * from t1;
2024-06-19 040155.135,user,db,127.0.0.1,48996,CREATE TABLE,,TABLE,public.t2,,DDL,,127.0.0.1-74293922-1048580-2-1,create table t2(id int);
2024-06-19 040209.568,user,db,127.0.0.1,48996,INSERT,,,,,WRITE,,127.0.0.1-74293922-1048580-3-1,insert into t2 values(1);
2024-06-19 040220.274,user,db,127.0.0.1,48996,DROP TABLE,,TABLE,public.t2,,DDL,,127.0.0.1-74293922-1048580-4-1,drop table t2;

维护审计日志#

审计日志单个文件大小限制为6M,超过6M会创建新的文件,需要确保足够的空间,可以定期清理历史不需要的文件。