模拟审计日志数据
本文包括两大部分内容:1)对openGauss审计日志的调研,2)模拟一个简单教务系统的多用户审计日志
审计日志调研
日志位置
通过下面的语句可以查询到各种配置文件的路径
例如postgresql.conf文件路径:/var/lib/opengauss/data/postgresql.conf
select name,setting from pg_settings where category=’File Locations’;
查看审计日志的文件夹名:
SHOW audit_directory;
审计日志完整路径:/var/lib/opengauss/data/pg_audit
比较OG和PG 中的日志管理
| openGauss | pg_log
数据库运行日志,openGauss运行时数据库节点以及openGauss安装部署时产生的日志统称为系统日日志
pg_xlog
WAL 日志,事务日志信息即重做日志
pg_clog
事务提交日志,记录的是事务的元数据
pg_audit
审计功能开启时会不断产生大量的审计日志,占用磁盘空间。用户可以根据磁盘空间的大小设置审计日志维护策略。
gs_profile
性能日志指的是数据库系统在运行时检测物理资源的运行状态的日志,在对外部资源进行访问时的性能检测,包括磁盘等外部资源的访问检测信息。 |
| — | — |
| postgresql | pg_log
pg_xlog
pg_clog |
审计日志
openGauss将用户对数据库的所有操作写入审计日志。数据库安全管理员可以利用这些日志信息,重现导致数据库现状的一系列事件,找出非法操作的用户、时间和内容等。
默认时开启审计功能的audit_enabled,除了审计总开关,各个审计项也有对应的开关。只有开关开启,对应的审计功能才能生效。审计概述
审计相关的配置
下面列出了所有审计配置,其中就包括对各个审计项的配置:
1 |
|
配置审计项
这里我们在默认值的基础上,打开对表操作的审计,执行存储过程、函数的审计,copy操作的审计
1 |
|
1 |
|
我们也可以直接修改postgresql.conf文件来配置,修改后也需要重启数据库。
查询审计日志
通过下面的查询语句,可以查询到指定时间段内的所有审计日志。
1 |
|
1 |
|
审计日志存储到表格
在前面我们可以通过查询语句查看日志,但是仍不方便。我们可以使用下面的语句将查询到的日志信息存储到表格中,方便我们观察、过滤日志信息。
1 |
|
模拟审计日志
我们假设需要模拟一个多数据库用户场景下的教务管理系统的审计日志,分为下面几个步骤:设计教务管理数据库,创建多用户,创建数据库,使用python脚本模拟各个用户的操作。
数据库设计
db_school设计
public模式设计
这个教务管理系统中由4个表组成:
教师表(工号,姓名)
学生表(学号,姓名,班级)
课程表(课程号,授课老师工号,课程名,学分)
成绩表(学号,课程号,成绩)
TODO:修改ER图,score表的键应该是student_id+course_id
创建多用户
多用户设计
opengauss:超级管理员,创建用户pm
- pm:项目架构师;负责设计、创建数据库、表格、视图;创建下面的用户
- t_coder:老师端,主要对成绩表增、改
- s_coder:学生端,成绩查询
- affair:教务处,负责增删学生表、老师表、课程表
各个用户的权限设计
openGauss支持以下的权限:SELECT、INSERT、UPDATE、DELETE、TRUNCATE、REFERENCES、CREATE、CONNECT、EXECUTE、USAGE、ALTER、DROP、COMMENT、INDEX和VACUUM。不同的权限与不同的对象类型关联。
对象所有者的权限(例如ALTER、 DROP、COMMENT、INDEX、VACUUM、GRANT和REVOKE)是隐式拥有的,即只要拥有对象就可以执行对象所有者的这些隐式权限。用户权限设置
pm | sysadmin |
---|---|
t_coder | SELECT ON ALL TABLES IN SCHEMA public |
s_coder | SELECT ON ALL TABLES IN SCHEMA public |
UPDATE ON public.score | |
affair | SELECT ON ALL TABLES IN SCHEMA public |
UPDATE ON ALL TABLES IN SCHEMA public |
1 |
|
具体对模式的访问权限设置,我们在下面创建好表格后再为用户分配权限。
创建数据库
使用pm用户创建数据库
1 |
|
在public下建表
1 |
|
给用户赋予public模式权限
1 |
|
当没有给用户赋予访问schema的权限时,是无法操作表的:
添加了查询权限之后,使用命令 \dt 可以看到当前可以访问的表了。
模拟用户操作
准备40名学生、5名老师、5门课程信息
模拟5天操作的数据
代码实现
1 |
|