找回密码
 立即注册
首页 业界区 安全 kingbase数据库的审计功能详解

kingbase数据库的审计功能详解

庇床铍 2025-9-29 13:41:00
一、Kingbase审计概述

审计功能用于记录数据库操作日志,保障数据安全,满足合规性(如等保、GDPR等)。Kingbase支持:

  • 用户行为审计(登录、DDL、DML等)
  • 数据访问审计(敏感表查询)
  • 权限变更审计(用户/角色授权)
  • 自定义审计策略(精细控制审计范围)
对数据库系统中发生的动作(或事件),将其对应的操作对象、操作时间等信息记录下来的过程,称为审计。KingbaseES数据库除了支持策略审计外,同时还支持对实时入侵检测、审计策略的备份和恢复以及审计记录管理。
任何系统的安全保护措施都不是完美无缺的,蓄意盗窃,破坏数据的人总是想方设法打破控制,审计功能将用户对数据库的所有操作自动记录下来放入审计日志中,审计员(sao)可以通过对审计日志的分析,对潜在的威胁提前采取有效地措施加以防范。KingbaseES数据库提供了一套完整的审计机制,用来保证对数据库中的各种行为进行监控,进而为数据库的安全、可靠和有效提供有力的保障。
KingbaseES 的审计设置分为三种类型:服务器事件审计、语句级别审计、模式对象级别审计。

  • 服务器事件审计
审计数据库服务器发生的事件,包含以下几种:数据库服务器的启动、数据库服务器的停止、数据库服务器配置文件的重新加载、用户登录、用户登出。简称为:服务器级审计或服务器审计。

  • 语句级别审计
也称为 STATEMENT AUDITING,指在 DBMS 范围内,对 DBMS 拥有的结构或模式对象进行操作时引发的事件进行审计,此类结构或模式对象并不指具体的某个结构或模式对象,而是一类结构或模式对象的泛称。 通常,包括 DBMS 提供的 DDL 、DML 、DQL 、DCL 、TCL 等语句引发的事件,简称为:语句级审计或语句 审计。

  • 模式对象级别审计
也称为 SCHEMA OBJECT AUDITING,指在某个确定的模式对象上进行 SELECT 或 DML 操作时引发的事 件进行审计。模式对象包括表、视图、物化视图、过程、函数、序列。模式对象不包括有依附关系的对象,如 依附于表的索引、约束、触发器、分区表等,简称为:模式对象级审计或对象审计。
1.png

二、审计配置方式

2.1 审计开关

KingbaseES 数据库中对审计功能设置了开关。审计功能关闭时,数据库不会发生审计动作,也无法将审计设置 应用到数据库中。审计员(sao )如果要使 KingbaseES 系统中的审计设置生效,必须打开该审计开关。
KingbaseES 数据库通过插件 sysaudit 实现审计功能,修改 kingbase.conf 文件中 shared_preload_libraries参数
  1. shared_preload_libraries = 'sysaudit'
复制代码
审计功能的总开关为 sysaudit.enable,有on和off两种选择,缺省为 off。
  1. on表示打开审计功能;
  2. off表示关闭审计功能;
复制代码
打开(或关闭)审计开关的方式有如下方式:

  • 在KingbaseES启动之前,通过修改 kingbase.conf 文件,将 sysaudit.enable设置为on(或off)
  • 在KingbaseES启动后,以审计员用户连接数据库,利用ALTER SYSTEM命令将 sysaudit.enable 设置为on | off。打开(或关闭)审计开关,重载配置后,数据库系统中的审计功能立即生效(或失效)。

2.2 审计相关参数

参数参数说明sysaudit.enable设置审计功能是否开启的总开关,有 on 和 off 两种选择,缺省为off。sysaudit.serverevent服务器事件审计开关,包括:服务器启动、关闭、重载配置,服务器启动时设置,默认off。sysaudit.userevent用户事件审计开关,包括:客户端登录和退出,默认 off。sysaudit.syntaxerror语言错误审计开关,设置是否审计发生语法错误的语句,默认off。此类错误也包括: 事务块中发生错误之后,未经语法分析而直接报错的语句。sysaudit.audit_table_hostaddr存储审计日志的数据库的 IP 地址,默认是本机。sysaudit.audit_table_port存储审计日志的数据库的端口。sysaudit.audit_table_user存储审计日志的数据库的用户,默认为审计管理员 sao。sysaudit.audit_table_password存储审计日志的数据库的用户密码。sysaudit.local_sao_password数据库的审计管理员 sao 用户密码。sysaudit.bgw_workers审计启动的后台进程数,默认为 1,设置范围是 [1,INT_MAX],服务器级别参数, 建议服务器启动前配置。sysaudit.shared_cache审计使用的共享内存大小,默认 10MB,设置范围是 [1,INT_MAX],服务器级别参数, 建议服务器启动前配置。sysaudit.third_store_num第三方审计的批量提交审计日志条数,仅用于第三方审计性能测试,默认为1,设置范围 是 [1, 1000]。sysaudit.enable_encrypt开启参数后,会对生成密钥、数据加密和解密事件进行审计。sysaudit.enable_mac开启参数后,会对创建强制访问控制规则、带有读和写的强制访问控制规则事件进行审计。sysaudit.enable_audit_cluster_datatransfer开启参数后,会对集群环境下的主备机通信进行审计。sysaudit.enable_audit_cluster_set_guc_param开启参数后,会对集群环境下的主备机之间 GUC参数同步行为进行审计。sysaudit.processevent开启参数后,审计后台子进程启动退出事件。sysaudit.all_error开启参数后,审计全部错误事件,即所有的 error以上的错误日志都记入审计日志。sysaudit.report_log开启参数后,将 KES的审计日志通过操作系统标准的日志外发接口,外发到其他服务器机器上。仅审计管理员 sao 有权限对此参数进行更改,且此功能暂不支持Windows平台上运行。
2.3 审计策略的配置

审计功能开启后,可对 KingbaseES 数据库进行服务器事件级别审计、语句级别审计和模式对象级别审计。
2.3.1 服务器事件审计

只要打开审计开关以及服务器事件 sysaudit.serverevent或者用户事件的开关 sysaudit.userevent,总是在审计中记录发生的服务器事件,不需要设置审计策略。
2.3.2 语句级别审计

分组名称:
ALL、ALTER、COPY、CREATE、DML、DROP、FUNCTION、GRANT、INDEX、MATERIALIZED VIEW、PROCEDURE、SELECT、SEQUENCE、SYSTEM、TABLE、TRANSACTION、VIEW
ALL类型审计简介:
不推荐使用 ALL 类型审计,对性能有影响。
ALL 类型审计可以设置语句级和模式对象级,但都不能指定对象。
数据库在审计过程中,需要先读取审计规则, 之后使用审计规则判断, 才能生成审计记录。如果在读取审计规则前就出错,可能无法生成审计记录。
启用语句审计
  1. sysaudit.set_audit_stmt(audit_type text,
  2. audit_users text,
  3. audit_schema text,
  4. audit_objs text
  5. )
复制代码
参数说明:

  • audit_type
语句级审计策略,支持DML、DDL、TCL语句等。
可以指定审计某一种SQL命令。详见上表 审计策略与SQL命令对应表 。

  • audit_users
审计的用户名,null表示审计所有用户。
当 audit_type 设置为 ALL 时,必须指定审计的用户。

  • audit_schema
审计对象的模式名。可以为空,表示审计所有模式下的此类对象。

  • audit_objs
审计对象的名称,只有select table、insert table、update table、delete table、truncate table、drop table这六种语句支持设置表名。

  • 返回值说明
无返回值。

取消审计
  1. sysaudit.remove_audit (rule_id int)
复制代码
参数说明:

  • rule_id
审计策略编号(创建后可从sysaudit.all_audit_rules中查询)

语句审计示例:
  1. 审计system用户的表创建动作:
  2. SELECT sysaudit.set_audit_stmt('CREATE TABLE', 'system', null, null);
  3. 审计用户user_a的表修改动作:
  4. SELECT  sysaudit.set_audit_stmt('alter table', 'user_a', null, null);
  5. 取消编号为10001的审计策略:
  6. CALL sysaudit.remove_audit (10001);
  7. 取消所有审计策略:
  8. CALL sysaudit.remove_audit(null);
复制代码

2.3.3 模式对象级别审计

模式对象级审计发生在具体的对象上的DML/SELECT操作,需要指定模式名及其对象名。只有对相应对象执行正确的设置才会触发审计,比如:为函数对象设置一个INSERT的审计策略将无法生效,因为数据库并不支持INSERT到一个函数。
启用对象审计:
  1. sysaudit.set_audit_object(audit_type text,
  2. audit_users text,
  3. audit_schema text,
  4. audit_objs text)
复制代码
参数说明:

  • audit_type
审计对象的类型,支持 :TABLE、VIEW、MATERIALIZED VIEW、PROCEDURE、FUNCTION,大小写不敏感。

  • audit_users
审计的用户名,null表示审计所有用户。

  • audit_schema
审计对象的模式名。可以为空,表示审计所有模式下的此类对象。

  • ** audit_objs**
审计对象的名称,比如为表名、视图名、存储过程名。可以为空,表示审计指定模式下的所有此类对象。

  • 返回值说明:
无返回值。
  
取消对象审计:
  1. sysaudit.remove_audit (audit_id int)
  2. sysaudit.remove_audit (null)
复制代码
参数说明:

  • audit_id
审计策略编号,即 sysaudit.all_audit_rules中的audit_id。若不指定审计策略编号,参数为null时,将会删除当前用户能管理的所有审计规则。

对象审计示例:
  1. 审计 user1 用户对 public 模式下的表 t1 的任意操作。
  2. SELECT sysaudit.set_audit_object('table', 'user1', 'public', 't1');
  3. 取消id为10002的审计设置。
  4. CALL sysaudit.remove_audit (10002);
复制代码
三、审计配置查询

审计策略设置可通过系统视图 sysaudit.all_audit_rules查询,结构如下表所示:
列名数据类型说明audit_idint审计策略编号audit_targetsmallint审计目标(事件、语句、对象)audit_typetext审计类型audit_userstext审计用户audit_schematext审计对象所在模式audit_objnamestext审计对象名称audit_objoidoid审计对象idcreator_nametext策略设置者的角色示例:

语句级别审计
  1. --system用户创建测试表t1
  2. \c - system
  3. 您现在以用户名"system"连接到数据库"test"。
  4. CREATE TABLE t1 (a int);
  5. CREATE TABLE
  6. --sao用户开启审计、配置审计规则、查看审计规则
  7. \c - sao
  8. 您现在以用户名"sao"连接到数据库"test"。
  9. ALTER system SET sysaudit.enable = on;
  10. ALTER SYSTEM
  11. SELECT sys_reload_conf();
  12. sys_reload_conf
  13. -----------------
  14. t
  15. (1 行记录)
  16. SELECT sysaudit.set_audit_stmt('insert table','system','public','t1');
  17. set_audit_stmt
  18. ----------------
  19. (1 行记录)
  20. SELECT * FROM sysaudit.all_audit_rules ;
  21. audit_id | audit_target |  audit_type  | audit_users | audit_schema | audit_objname | audit_objoid | creator_name
  22. ----------+--------------+--------------+-------------+--------------+---------------+--------------+--------------
  23.     16387 | SQL          | insert table | system      | public       | t1            |        16384 | sao
  24. (1 行记录)
  25. --system执行SQL语句触发审计
  26. \c - system
  27. 您现在以用户名"system"连接到数据库"test"。
  28. INSERT INTO t1 VALUES (1);
  29. INSERT 0 1
  30. --sao用户登录security库查看审计日志
  31. \c security sao
  32. 您现在以用户名"sao"连接到数据库"security"。
  33. security=> SELECT COUNT(*) FROM sysaudit_record_sao WHERE opr_type = '插入';
  34. count
  35. -------
  36.    1
  37. (1 行记录)
  38. --sao用户取消审计规则
  39. security=> \c test sao
  40. 您现在以用户名"sao"连接到数据库"test"。
  41. SELECT sysaudit.remove_audit(16387);
  42. remove_audit
  43. --------------
  44. (1 行记录)
  45. SELECT * FROM sysaudit.all_audit_rules ;
  46. audit_id | audit_target | audit_type | audit_users | audit_schema | audit_objname | audit_objoid | creator_name
  47. ----------+--------------+------------+-------------+--------------+---------------+--------------+--------------
  48. (0 行记录)
复制代码

对象级审计:
  1. --sao用户设置审计规则
  2. SELECT sysaudit.set_audit_object('table','system','public','t1');
  3. set_audit_stmt
  4. ----------------
  5. (1 行记录)
  6. SELECT * FROM sysaudit.all_audit_rules ;
  7. audit_id | audit_target | audit_type | audit_users | audit_schema | audit_objname | audit_objoid | creator_name
  8. ----------+--------------+------------+-------------+--------------+---------------+--------------+--------------
  9.     16388 | Object       | table      | system      | public       | t1            |        16384 | sao
  10. (1 行记录)
  11. --system执行SQL语句触发审计
  12. \c - system
  13. 您现在以用户名"system"连接到数据库"test"。
  14. SELECT * FROM t1;
  15. a
  16. ---
  17. 1
  18. (1 行记录)
  19. --sao用户登录security库查看审计日志
  20. \c security sao
  21. 您现在以用户名"sao"连接到数据库"security"。
  22. security=> SELECT COUNT(*) FROM sysaudit_record_sao WHERE opr_type = '查询';
  23. count
  24. -------
  25.    1
  26. (1 行记录)
  27. --sao用户取消审计规则
  28. security=> \c test sao
  29. 您现在以用户名"sao"连接到数据库"test"。
  30. SELECT sysaudit.remove_audit(16388);
  31. remove_audit
  32. --------------
  33. (1 行记录)
  34. SELECT * FROM sysaudit.all_audit_rules ;
  35. audit_id | audit_target | audit_type | audit_users | audit_schema | audit_objname | audit_objoid | creator_name
  36. ----------+--------------+------------+-------------+--------------+---------------+--------------+--------------
  37. (0 行记录)
复制代码
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

您需要登录后才可以回帖 登录 | 立即注册