# 数据库审计 本章节描述了 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_libraries`和`pgaudit.log` 控制,目前不支持动态加载,设置之后需要重启数据库主节点。 ```sh 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`开启。 ```sh ALTER ROLE user1 SET pgaudit.log = 'DDL,READ'; ``` ## 查看审计日志 审计日志的目录为 `${OUSHUDB_LOG_PATH}/audit`, `OUSHUDB_LOG_PATH` 环境变量可以通过如下命令获取: ```sh source /usr/local/oushu/oushudb/oushudb_path.sh env ${OUSHUDB_LOG_PATH} ``` 审计日志的文件名称为 `audit-${timestamp}.csv`。 其中`${time_stamp}` 是指审计线程创建审计日志文件时获取的系统时间戳。 - 示例 ```sh 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会创建新的文件,需要确保足够的空间,可以定期清理历史不需要的文件。