人大金仓数据库KingbaseES- 数据库审计

金仓数据库KingbaseES- 数据库审计

关键字:

KingbaseES、audit、审计、人大金仓

审计

对数据库系统中发生的动作(或事件),将其对应的操作对象、操作时间等信息记录下来的过程,称为审计。

任何系统的安全保护措施都不是完美无缺的,蓄意盗窃,破坏数据的人总是想方设法打破控制,审计功能将用户对数据库的所有操作自动记录下来放入审计日志中,审计员(sao)可以通过对审计日志的分析,对潜在的威胁提前采取有效地措施加以防范。KingbaseES数据库提供了一套完整的审计机制,用来保证对数据库中的各种行为进行监控,进而为数据库的安全、可靠和有效提供有力的保障。

使用审计功能

1. 使用前进行配置

修改配置文件 kingbase.conf 文件中 shared_preload_libraries,增加审计插件 sysaudit:

shared_preload_libraries = 'sysaudit'

重启数据库

数据库审计员 sao 打开审计开关

/c - sso

alter system set sysaudit.enable = on;

select sys_reload_conf();

2. 配置审计功能

1) 默认审计

在initdb阶段可以通过参数启动默认审计功能:

./initdb -D data1 -Usystem -x123456 --init-audit-rules

2)配置参数

审计功能非常复杂,可配置的参数非常多,目前可配置参数如下图:

根据审计用户的不同,需要用不同用户进行审计规则设置:

数据库审计员 sao 负责设置对超级用户(包括数据库管理员 system)及数据库安全员 sso 的审计规则;数据库安全员 sso 负责设置对普通用户和数据库审计员 sao 的审计规则;

审计规则设置可以设置语句级审计和对象级审计(对象级审计只审计 insert、update、delete 和 select 四种语句),insert、update、delete 和 select 审计类型可以设置审计对象。

具体审计支持的审计类型可以参考数据库审计部分的安全手册

3)示例

数据库审计员 sao 和数据库安全员 sso 登录数据库之后,可以直接设置审计规则:

--数据库审计员 sao 设置语句级审计规则,审计类型为 select table 语句,审计用户为数据库管理员 system,审计对象为public 模式下的 tab1

select sysaudit.set_audit_stmt(‘select table’,’system’,’public’,’tab1’);

--数据库安全员 sso 设置对象级审计规则,审计类型为 table 对象,审计用户为普通用户 user1,审计对象为 public 模式下的 tab2

select sysaudit.set_audit_object(‘table’,’user1’,’public’,’tab2’);

数据库审计员 sao 和数据库安全员 sso 可以通过查询系统视图 sysaudit.all_audit_rules 查看自己设置了哪些审计规则:

select * from sysaudit.all_audit_rules;

数据库审计员 sao 和数据库安全员 sso 可以通过系统函数删除自己设置的审计规则:

--删除 oid 为 16384 的审计规则

select sysaudit.remove_audit(16384);

--删除当前用户设置的所有审计规则select sysaudit.remove_audit(null);

审计用例

--开启审计功能

\c – sao

alter system set sysaudit.enable = on;

--由sao对system进行审计

--创建表

\c test system

create table t_table(a int);

create table t_insert(a int);

--设置审计规则

\c - sao

call sysaudit.set_audit_object('table', 'system', 'public', 't_table');

call sysaudit.set_audit_stmt('insert table','SYSTEM','public','t_insert');

--查看审计规则

select * from sysaudit.all_audit_rules ;

--结果:

audit_id | audit_target | audit_type | audit_users | audit_schema | audit_objname | audit_objoid | creator_name

----------+--------------+--------------+-------------+--------------+---------------+--------------+--------------

16397 | Object | table | system | public | t_table | 16391 | sao

16398 | SQL | insert table | system | public | t_insert | 16394 | sao

(2 行记录)

--执行sql向表中插入数据

\c - system

insert into t_table values (1);

insert into t_insert values (2);

--查看审计记录

\c security sao

select username,db_name,rule_type,obj_type,schm_name,obj_name,sqltext,result from sysaudit_record_sao;

--结果:

username | db_name | rule_type | obj_type | schm_name | obj_name | sqltext | result

----------+---------+----------------+----------+-----------+----------+----------------------------------+--------

system | test | 表 | 表 | public | t_table | insert into t_table values (1); | 成功

system | test | 向表中插入数据 | | public | t_insert | insert into t_insert values (2); | 成功

(2 行记录)

--出现以上结果表明审计成功,否则说明审计失败

--审计system的所有操作

/c - sao

call sysaudit.set_audit_stmt('all','SYSTEM','','');

\c – system

create table t_all(a int);

insert into t_all values (1),(2),(3);

select * from t_all ;

delete from t_all;

select * from t_all;

\c security sao

select username,db_name,rule_type,opr_type,obj_type,schm_name,obj_name,sqltext,result from sysaudit_record_sao;

username | db_name | rule_type | opr_type | obj_type | schm_name | obj_name | sqltext | result

----------+---------+-----------+----------------+----------+-----------+----------+---------------------------------------+--------

system | test | 事件 | 用户登录 | | | | | 成功

system | test | 全部 | 创建表 | | | | create table t_all(a int); | 成功

system | test | 全部 | 插入 | | public | t_all | insert into t_all values (1),(2),(3); | 成功

system | test | 全部 | 设置 | | | | set ora_input_emptystr_isnull to off; | 成功

system | test | 全部 | 设置 | | | | set ora_input_emptystr_isnull to on; | 成功

system | test | 全部 | 设置 | | | | set ora_input_emptystr_isnull to off; | 成功

system | test | 全部 | 设置 | | | | set ora_input_emptystr_isnull to on; | 成功

system | test | 全部 | 查询 | | public | t_all | select * from t_all ; | 成功

system | test | 全部 | 删除 | | public | t_all | delete from t_all; | 成功

system | test | 全部 | 查询 | | public | t_all | select * from t_all; | 成功

system | test | 事件 | 用户退出 | | | | | 成功

--查询得出以上结果说明对system所有操作的审计成功

--删除审计规则

call sysaudit.remove_audit(16397);

call sysaudit.remove_audit(16398);

--审计登录登出事件

\c – sao

alter system set sysaudit.userevent = on;

alter system set sysaudit.serverevent = on;

call sys_reload_conf();

\c – system

\c security sao

select * from sysaudit_record_sao;

--初始化数据库时启用默认审计规则

./initdb -D data -Usystem -x123456 --init-audit-rules

上面演示了如何设置、查看和删除审计规则,并查看审计记录。

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值