数据库安全审计是企业级数据库必须提供的一个基础能力,有助于事后对访问合规性进行追溯。结合业界通用的做法,TeleDB从多个维度来提供全方位的审计能力,同时TeleDB审计通过旁路检测方式,对数据库运行效率的影响极小。
TeleDB审计主要包括粗粒度审计(audit)和细粒度审计(fga)。
- 粗粒度审计日志主要存储在cn的audit-*.log:主要针对语句级别、用户级别、对象级别,对象操作级别,主要在sql语法解析层面进行捕捉。
- 细粒度粒度审计日志存储在dn的audit-*.fga:主要是针对某个表的列属性、列的值进行审计,在sql执行器进行捕捉。
说明
两套审计规则都依赖audit_admin的审计管理员用户。
审计管理员audit_admin、安全管理员mls_admin、数据库管理员三权分立,审计用户命名必须以audit_开头。
audit和fga使用兼容:相互独立,可只用audit;可只用fga;可用audit和fga。
粗粒度audit操作步骤:
以audit_admin用户进行连接,执行审计规则audit all,会将后续的语句审计记录在$DATADIR/pg_log/audit/audit-*.log
$ ./psql -h 127.0.0.1 -p11111 -d postgres -W -U audit_admin
Password for user audit_admin:
psql (PostgreSQL 10.0 TeleDBX V6)
Type "help" for help.
postgres=> audit all;
WARNING: AuditDefine Rcv: audit all;
WARNING: AuditDefine Snd: AUDIT ALL ;AUDIT
细粒度fga操作步骤:
在每1个cn和dn都会开启1个audit logger process和1个后台进程bgworker:audit fga worker
--tangyujie是初始化的超级用户
$ ./psql -h 127.0.0.1 -p11111 -d postgres -W -U tangyujie
--------------------------------步骤1: 创建插件&查看参数
create extension pg_fga;show enable_fga;
--1.创建用户和数据库CREATE USER audit_fga_user WITH SUPERUSER CREATEDB LOGIN ENCRYPTED PASSWORD
'audit_fga_user';CREATE DATABASE audit_fga_database;
--2切换到audit_fga_database数据库
\c audit_fga_database audit_fga_user;create extension pg_fga;
--3.切换到audit_fga_user用户,建表插入数据
\c audit_fga_database audit_fga_usercreate table foo(idx bigint, str text);insert into foo values(1, 'a');
3.3 验证insert into foo values(2, 'b');insert into foo values(3, 'c');insert into foo values(4, 'd');select * from foo;
--------------------------------步骤2: 制定审计规则
--4.切换到 audit_admin审计管理员用户
\c audit_fga_database audit_admin
-- 4.1 增加审计规则add_policy(指定模式、表名、规则名, 列名、审计条件,模式,存储过程、是否开启审计,语句类型)add_policy(object_schema,object_name,policy_name,audit_columns,audit_condition,handler_schema,handler_module,audit_enable,statement_types,audit_column_opts),其中audit_enable必须为true才能生效,默认为true。select add_policy(object_schema:='public', object_name:='foo',audit_columns:='idx',policy_name:='poli', audit_condition:='idx > 1');select add_policy('public', 'foo', 'poli1','idx','idx >1','public','hello_world','true','select');
-- 4.2 查询pg_fga插件的视图
select * from pg_audit_fga_conf;select * from pg_audit_fga_conf_detail ;select *from pg_audit_fga_policy_columns_detail;
--------------------------------步骤3: 生效审计规则
-- 4.3开启审计规则
enable_policy(指定模式、表名、规则名),使得audit_enable为trueselect enable_policy(object_schema:='public', object_name:='foo',policy_name:='poli');select enable_policy(object_schema:='public', object_name:='foo',policy_name:='poli1');
--------------------------------其他函数
-- 4.4 删除审计规则drop_policy(指定模式、表名、规则名)。
select drop_policy(object_schema:='public', object_name:='bar',policy_name:='poli');
-- 4.5 禁用审计规则
disable_policy(指定模式、表名、规则名),使得audit_enable为false
select disable_policy(object_schema:='public', object_name:='foo',policy_name:='poli1');
审计日志管理
- 设置设计规则
① 在当前实例下拉框选择您所需要查询的实例,选择审计日志页签,单击 审计设置 ,出现审计设置弹框。
② 在审计设置弹框中,选择 是否开启审计 、 审计粒度 ,单击确定完成审计设置。
- 当审计粒度为 全局级 ,您可对需要进行审计和告警的动作进行选择。
- 当审计粒度为 对象级 ,您需设置对象审计规则同时使用。
- 审计规则管理
① 在当前实例下拉框选择您所需要查询的实例,选择审计日志页签,单击 审计规则管理 ,进入审计规则管理页面。
② 新增审计规则
- 在审计规则管理页面,单击 新增审计规则 ,出现新增审计规则弹框。
- 在新增审计规则弹框中,输入 规则名称 、选择 审计对象名称 、勾选 审计操作类型 、输入审计对象和选择 是否开启 , 是否触发告警 ,单击确定完成新增审计规则。
③ 编辑审计规则
单击已创建审计规则所在行的 编辑 ,可修改审计规则。
④ 删除审计规则
单击已创建审计规则所在行的 删除 ,可删除审计规则。
- 查看审计日志
选择审计日志页签,在当前实例下拉框选择您需要查询的实例,设置查询开始时间和结束时间,在下拉框 选择查询条件 ,单击 查询 。
查询条件可选择 节点名称 、 审计类型 、 SQL语句 、数据库名称和 用户名 。