审计日志可以记录哪些类型的操作?如何配置审计策略以只记录特定的高危操作(如DROP TABLE)?
审计日志可以记录几乎所有类型的SQL操作。要配置审计策略以只记录特定的高危操作(如 DROP TABLE),需要通过 CREATE AUDIT POLICY 命令,并在 sql_commands 参数中精确指定需要记录的命令类型。
一、审计日志可以记录的操作类型
审计日志用于记录用户的数据库操作,其记录范围非常全面,主要分为以下几大类:
- 数据定义语言(DDL):
CREATE_DB,CREATE_TABLE,CREATE_VIEW,CREATE_INDEX,CREATE_PROCEDURE,CREATE_FUNCTIONALTERDB,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
- 数据操作语言(DML):
SELECT,INSERT,DELETE,UPDATE,LOAD,MERGE
- 数据控制语言(DCL)与用户管理:
GRANT,REVOKECREATE_USER,DROP_USER,RENAME_USER
- 其他操作:
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_TABLE、DROP_DB、TRUNCATE 和 DROP_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:执行测试并查看审计日志
执行高危命令:
DROP TABLE t1; DROP DATABASE test_db;查询审计日志:
-- 查看记录,重点关注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_TABLE和DROP_DB操作的记录,而普通的SELECT、INSERT等操作不会被记录。
步骤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 的用户 admin 在 prod_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'
);四、总结
- 记录范围:审计日志可记录几乎所有SQL操作类型,包括DDL、DML、DCL等。
配置方法:通过
CREATE AUDIT POLICY命令,利用sql_commands参数指定需要记录的命令列表(多个命令用无空格逗号分隔)。- 核心步骤:开启日志 -> 创建策略 -> 验证记录。
- 高级控制:可结合
user、hosts、db、status等参数实现多维度的精细化审计。
通过上述配置,可以精准捕获像 DROP TABLE 这样的高危操作,既满足了安全审计和故障追溯的需求,又避免了记录大量无关日志造成的存储和性能开销。这是GBase 8a安全管理中一项非常关键的能力。
评论
热门帖子
- 12025-12-01浏览数:182084
- 22023-05-09浏览数:24337
- 42023-09-25浏览数:17540
- 52020-05-11浏览数:16583