GBase 8a
其他
文章
精选

审计日志可以记录哪些类型的操作?如何配置审计策略以只记录特定的高危操作(如DROP TABLE)?

发表于2026-03-22 11:08:3224次浏览3个评论

审计日志可以记录几乎所有类型的SQL操作。要配置审计策略以只记录特定的高危操作(如 DROP TABLE),需要通过 CREATE AUDIT POLICY 命令,并在 sql_commands 参数中精确指定需要记录的命令类型。

一、审计日志可以记录的操作类型

审计日志用于记录用户的数据库操作,其记录范围非常全面,主要分为以下几大类:

  1. 数据定义语言(DDL)
    • CREATE_DB, CREATE_TABLE, CREATE_VIEW, CREATE_INDEX, CREATE_PROCEDURE, CREATE_FUNCTION
    • ALTERDB, ALTER_TABLE, ALTER_PROCEDURE, ALTER_FUNCTION, ALTER_EVENT
    • 高危操作DROP_DB, DROP_TABLE, DROP_VIEW, DROP_INDEX, DROP_PROCEDURE, DROP_FUNCTION, DROP_EVENT, TRUNCATE, RENAME_USER
  2. 数据操作语言(DML)
    • SELECT, INSERT, DELETE, UPDATE, LOAD, MERGE
  3. 数据控制语言(DCL)与用户管理
    • GRANT, REVOKE
    • CREATE_USER, DROP_USER, RENAME_USER
  4. 其他操作
    • OTHERS:用于涵盖未单独列出的其他SQL类型。

在审计策略配置表中,sql_commands 参数的可选值完整列出了上述命令(见《3-GBase 8a MPP Cluster 集群安全管理.pdf》)。

二、如何配置审计策略以只记录特定的高危操作(如DROP TABLE)

配置的核心是创建一个自定义的审计策略,通过 sql_commands 参数进行“白名单”过滤。以下是具体步骤:

步骤1:开启审计日志并设置为表模式

这是记录日志的前提。

-- 1. 设置审计日志输出到系统表(便于查询)
SET GLOBAL log_output='table';
-- 2. 开启审计日志功能
SET GLOBAL audit_log=1;
-- 3. 验证参数
SHOW VARIABLES LIKE '%audit_log%';
SHOW VARIABLES LIKE '%log_output%';

步骤2:创建自定义审计策略(关键步骤)

使用 CREATE AUDIT POLICY 命令,在 sql_commands 中列出所有需要记录的高危操作。

示例:创建一个名为 audit_critical 的策略,只记录 DROP_TABLEDROP_DBTRUNCATEDROP_USER 操作。

CREATE AUDIT POLICY audit_critical (
    enable = 'Y',
    sql_commands = 'DROP_TABLE,DROP_DB,TRUNCATE,DROP_USER'
);

⚠️ 重要格式要求sql_commands 的值必须是多个命令以英文逗号连接,且命令间不能有空格,否则执行会报错。

示例(记录包括 DROP_TABLE 在内的多种高危操作):

CREATE AUDIT POLICY audit_policy_1 (
    enable='Y',
    sql_commands='DELETE,RENAME_USER,DROP_USER,DROP_DB,DROP_TABLE,DROP_INDEX,DROP_PROCEDURE,DROP_FUNCTION,DROP_EVENT,TRUNCATE,GRANT,REVOKE'
);

步骤3:执行测试并查看审计日志

  1. 执行高危命令

     

    DROP TABLE t1;
    DROP DATABASE test_db;
    
  2. 查询审计日志

     

    -- 查看记录,重点关注sql_command列
    SELECT start_time, user_host, sql_command, LEFT(sql_text, 100) AS sql_sample
    FROM gbase.audit_log
    ORDER BY start_time DESC;
    

    如果配置正确,你将只看到 DROP_TABLEDROP_DB 操作的记录,而普通的 SELECTINSERT 等操作不会被记录。

步骤4:清理审计日志(可选)

当日志表过大时,使用特定命令清理:

TRUNCATE SELF audit_log;

三、审计策略的其他精细化控制维度

除了按命令类型过滤,审计策略还支持更精细的控制,实现“只记录特定用户、特定主机、特定数据库的高危操作”:

策略项目参数示例与说明
按用户过滤user='username'user='app_user' 只记录该用户的操作。
按主机过滤hosts='192.168.1.%'只记录来自特定IP段的操作。支持通配符 %_
按数据库过滤db='finance_db'只记录针对该数据库的操作。
按执行时间过滤long_query_time=10只记录执行时间超过10秒的慢查询。
按执行结果过滤status='FAILED'只记录执行失败的操作。

组合示例:创建一个策略,只记录来自管理主机 192.168.1.100 的用户 adminprod_db 库中执行的 DROP_TABLE 操作。

CREATE AUDIT POLICY audit_admin_drop (
    enable = 'Y',
    user = 'admin',
    hosts = '192.168.1.100',
    db = 'prod_db',
    sql_commands = 'DROP_TABLE'
);

四、总结

  1. 记录范围:审计日志可记录几乎所有SQL操作类型,包括DDL、DML、DCL等。
  2. 配置方法:通过 CREATE AUDIT POLICY 命令,利用 sql_commands 参数指定需要记录的命令列表(多个命令用无空格逗号分隔)。

     

  3. 核心步骤开启日志 -> 创建策略 -> 验证记录
  4. 高级控制:可结合 userhostsdbstatus 等参数实现多维度的精细化审计

通过上述配置,可以精准捕获像 DROP TABLE 这样的高危操作,既满足了安全审计和故障追溯的需求,又避免了记录大量无关日志造成的存储和性能开销。这是GBase 8a安全管理中一项非常关键的能力。

评论

登录后才可以发表评论
用户头像
GBase用户28017发表于 1个月前
优秀
经纬发表于 1个月前
学习了
流泪猫猫头发表于 18小时前
学习了。