人大金仓KES安全之数据库审计

0    130    2

Tags:

👉 本文共约11303个字,系统预计阅读时间或需43分钟。

7.1. 审计概述

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

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

7.2. 审计开关

7.2.1. 加载插件

KingbaseES数据库通过插件sysaudit实现审计功能,修改 kingbase.conf 文件中 shared_preload_libraries 参数。

7.2.2. 审计的打开和关闭

KingbaseES数据库中对审计功能设置了开关。审计功能关闭时,数据库不会发生审计动作,也无法将审计设置应用到数据库中。审计员(sao)如果要使 KingbaseES 系统中的审计设置生效,必须打开该审计开关。

  • sysaudit.enable

    设置审计功能是否开启的总开关,有on和off两种选择,缺省为 off。on表示打开审计功能;off表示关闭审计功能;打开(或关闭)审计开关的方式有如下方式:在KingbaseES启动之前,通过修改 kingbase.conf 文件,将 sysaudit.enable设置为on(或off)在KingbaseES启动后,以审计员用户连接数据库,利用ALTER SYSTEM命令将 sysaudit.enable 设置为on | off。打开(或关闭)审计开关,重载配置后,数据库系统中的审计功能立即生效(或失效)。打开(或关闭)审计开关并重载的命令:ALTER SYSTEM SET sysaudit.enable = on | off; CALL sys_reload_conf();

7.3. 审计策略的配置

KingbaseES的审计设置分为三种类型:服务器事件审计、语句审计、模式对象审计。

  • 事件审计:审计数据库服务器发生的事件,包含以下几种:数据库服务器的启动、数据库服务器的停止、数据库服务器配置文件的重新加载、用户登录、用户登出。简称为:服务器级审计或服务器审计。
  • 语句级别审计:也称为 "STATEMENT AUDITING",指在 DBMS 范围内,对DBMS拥有的结构或模式对象进行操作时引发的事件进行审计,此类结构或模式对象并不指具体的某个结构或模式对象,而是一类结构或模式对象的泛称。通常,包括 DBMS 提供的 DDL、DML、DQL、DCL、TCL 等语句引发的事件。简称为:语句级审计或语句审计。
  • 模式对象级别审计:也称为 "SCHEMA OBJECT AUDITING",指在某个确定的模式对象上进行 SELECT 或 DML 操作时引发的事件进行审计。模式对象包括表、视图、物化视图、过程、函数、序列。模式对象不包括有依附关系的对象,如依附于表的索引、约束、触发器、分区表等。简称为:模式对象级审计或对象审计。

KingbaseES的审计参数设置如下:

  • sysaudit.serverevent

    服务器事件审计开关,包括:服务器启动、关闭、重载配置,服务器启动时设置,默认on。

  • sysaudit.userevent

    用户事件审计开关,包括:客户端登录和退出,默认on。

  • sysaudit.enable

    设置审计功能是否开启的总开关,有on和off两种选择,缺省为 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用户密码。

7.3.1. 服务器事件审计

只要打开审计开关以及服务器事件或者用户事件的开关,总是在审计中记录发生的服务器事件,不需要设置审计策略。

7.3.2. 语句级别审计

下表为审计策略与SQL命令对应表:

分组名称SQL命令说明
ALLALL目前审计支持的所有类型
ALTERALTER DATABASE更改数据库定义
ALTER TABLE更改表定义
ALTER INDEX更改索引定义
ALTER VIEW更改视图定义
ALTER MATERIALIZED VIEW更改物化视图定义
ALTER SCHEMA更改模式定义
ALTER SEQUENCE更改序列定义
ALTER FUNCTION更改函数定义
ALTER PROCEDURE更改过程定义
ALTER TABLESPACE更改表空间
ALTER USER更改用户
COPYCOPY FROM从文件中向表复制数据
COPY TO从表或查询向文件复制数据
CREATECREATE DATABASE定义数据库
CREATE TABLE定义表
CREATE INDEX定义索引
CREATE VIEW定义视图
CREATE MATERIALIZED VIEW定义物化视图
CREATE SCHEMA定义模式
CREATE SEQUENCE定义序列
CREATE FUNCTION定义函数
CREATE PROCEDURE定义过程
CREATE TABLESPACE定义表空间
CREATE USER定义用户
DMLDELETE TABLE删除记录
INSERT TABLE插入记录
UPDATE TABLE更新记录
DROPDROP DATABASE移除数据库
DROP TABLE移除表
DROP INDEX移除索引
DROP VIEW移除视图
DROP MATERIALIZED VIEW移除物化视图
DROP SCHEMA移除模式
DROP SEQUENCE移除序列
DROP FUNCTION移除函数
DROP PROCEDURE移除过程
DROP TABLESPACE移除表空间
DROP USER移除用户
FUNCTIONCREATE FUNCTION定义函数
ALTER FUNCTION更改函数定义
DROP FUNCTION移除函数
GRANTGRANT授予权限
INDEXCREATE INDEX定义索引
ALTER INDEX更改索引定义
DROP INDEX移除索引
MATERIALIZED VIEWCREATE MATERIALIZED VIEW定义物化视图
ALTER MATERIALIZED VIEW更改物化视图定义
DROP MATERIALIZED VIEW移除物化视图
PROCEDURECREATE PROCEDURE创建过程
ALTER PROCEDURE更改过程定义
DROP PROCEDURE移除过程
SELECTSELECT TABLE查询语句。从数据库中检索数据的过程 或命令叫做查询。在 SQL 语句里SELECT 命令用于指定查询。
SEQUENCECREATE SEQUENCE定义序列
ALTER SEQUENCE更改序列定义
DROP SEQUENCE移除序列
SYSTEMALTER SYSTEM更改服务器配置参数
TABLECREATE TABLE定义表
ALTER TABLE更改表定义
DROP TABLE移除表
TRUNCATE清空一个或者一组表
TRANSACTIONBEGIN开始事务块
COMMIT提交当前事务
ROLLBACK中止当前事务
SAVEPOINT在当前事务中定义保存点
ROLLBACK TO回滚到指定保存点
RELEASE释放指定的保存点
START TRANSACTION开始事务块
VIEWCREATE VIEW定义视图
ALTER VIEW更改视图定义
DROP VIEW移除视图

具体的 SQL 命令内容可参考 SQL语句参考手册

注意

数据库在审计过程中,需要先读取审计规则,之后使用审计规则判断,才能生成审计记录。如果在读取审计规则前,就出错,可能无法生成审计记录。

注意

关于ALL类型审计:

1.ALL类型审计可以设置语句级和模式对象级,但都不能指定对象

2.不推荐使用ALL类型审计,对性能有影响

启用语句审计:

参数说明:

  • audit_type

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

  • audit_users

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

  • audit_schema

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

  • audit_objs

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

返回值说明:

无返回值

取消审计:

参数说明:

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

语句审计示例:

审计system用户的表创建动作。

审计用户user_a的表修改动作

取消编号为10001的审计策略。

7.3.3. 模式对象级别审计

模式对象级审计发生在具体的对象上的DML/SELECT操作,需要指定模式名及其对象名。只有对相应对象执行正确的设置才会触发审计,比如:为函数对象设置一个INSERT的审计策略将无法生效,因为数据库并不支持INSERT到一个函数。

启用对象审计:

参数说明:

  • audit_type

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

  • audit_users

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

  • audit_schema

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

  • audit_objs

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

返回值说明:

无返回值。

取消对象审计:

对象审计示例:

审计 user1 用户对 public 模式下的表 t1 的任意操作。

取消id为10002的审计设置。

7.3.4. 审计配置查询

审计策略设置可通过系统视图 sysaudit.all_audit_rules 查询,结构如下表所示:

列名数据类型说明
audit_idint审计策略编号
audit_targetsmallint审计目标(事件、语句、对象)
audit_typetext审计类型
audit_userstext审计用户
audit_schematext审计对象所在模式
audit_objnamestext审计对象名称
audit_objoidoid审计对象id
creator_nametext策略设置者名

7.3.5. 审计配置备份恢复

审计策略可以使用sys_dump和sys_restore进行备份恢复,操作步骤如下:

1.分别使用sao和sso对每个配置了审计策略的数据库进行备份,例如:

2.分别使用sao和sso对新data实例进行恢复,例如:

注意

当数据库需要进行升级时也可以使用上述方法升级审计配置,但要在数据库升级前执行第一步即审计配置备份,升级完成后执行第二步恢复审计配置。

提示

审计配置备份恢复时,sys_dump和sys_restore不能指定-a参数,会导致审计配置无法备份恢复; 如果要指定--section参数,需要指定为post-data。

7.3.6. 示例

7.4. 审计入侵检测

当启动参数 sysaudit.ids 设置为true时,实时侵害检测系统会实时分析用户的操作,将其与系统中创建的实时侵害检测规则进行匹配,判断该用户操作是否是侵害行为。 当检测到侵害行为次数达到阀值时,服务器将自动断开连接。

启用入侵检测:

参数说明:

本人提供Oracle(OCP、OCM)、MySQL(OCP)、PostgreSQL(PGCA、PGCE、PGCM)等数据库的培训和考证业务,私聊QQ646634621或微信dbaup66,谢谢!
AiDBA后续精彩内容已被站长无情隐藏,请输入验证码解锁本文!
验证码:
获取验证码: 请先关注本站微信公众号,然后回复“验证码”,获取验证码。在微信里搜索“AiDBA”或者“dbaup6”或者微信扫描右侧二维码都可以关注本站微信公众号。

标签:

Avatar photo

小麦苗

学习或考证,均可联系麦老师,请加微信db_bao或QQ646634621

您可能还喜欢...

发表回复