#CREATE AUDIT POLICY
# 通用描述
CREATE AUDIT POLICY用于创建一个审计策略,通过指定不同的审计项对数据库操作进行审计。
只有拥有AUDIT_ADMIN审计管理员角色,或者拥有AUDIT SYSTEM系统权限的用户,才能创建一个审计策略。
一个成功创建的审计策略,还必须满足如下两个前提条件才会触发系统开始审计操作:
- 配置参数UNIFIED_AUDITING值为true,即审计开关为打开状态。
- 通过AUDIT POLICY语句将审计策略使能。
审计策略被成功创建后,可通过AUDIT_UNIFIED_POLICIES视图查看其定义信息。
YashanDB对用户提供如下方面的审计管理:
对于审计管理更具体的描述请查看安全手册审计。
# 语句定义
create audit policy::=
以下clause参数至少选择一个。
when_clause::=
# policy_name
审计策略的名称,审计策略名称不可重复,不可省略,不可带模式名,且需符合YashanDB的对象命名规范。
# privilege_audit_clause
该语句用于定义审计策略包含的系统权限的审计项,可同时定义多个系统权限审计项,用,
分隔。
system_privileges_clause
指定具体的系统权限名称,具体项目可在安全手册系统权限管理中查看。
对指定的系统权限启用审计策略后,所有使用到该权限的操作将被审计。
示例
-- 创建审计策略,定义对涉及select any table, delete any table权限的语句进行审计
CREATE AUDIT POLICY up1
PRIVILEGES SELECT ANY TABLE, DELETE ANY TABLE;
# action_audit_clause
该语句用于定义审计策略包含的系统行为或对象行为审计项,可同时定义多个行为审计项,用,
分隔,其中审计项可分为如下两种类型:
- 全局的审计项。
- 针对具体对象的审计项。
# system_action_clause
指定全局审计项。
# system_action
全局审计项目,具体项目可以通过AUDITABLE_SYSTEM_ACTIONS视图查看。
# all
当全局审计项指定为ALL时,表示在AUDITABLE_SYSTEM_ACTIONS中列出的所有项目都将纳入审计策略。
# object_action_clause
指定针对具体对象的审计项。
# object_action
针对对象的审计项目,具体项目可以通过AUDITABLE_OBJECT_ACTIONS视图查看。
# schema
模式名称,可省略,则使用当前登录用户的模式。
# object_name
对象名称,YashanDB支持对表、视图等所有对象进行操作审计。
示例
-- 创建审计策略,定义针对drop table类型语句、对表area的delete、insert、update操作、在branches所有操作进行审计
CREATE AUDIT POLICY up2
ACTIONS DROP TABLE,
DELETE ON sales.area,
INSERT ON sales.area,
UPDATE ON sales.area,
ALL ON sales.branches;
# role_audit_clause
该语句用于定义审计策略包含的角色的审计项,可同时定义多个角色审计项,用,
分隔。
role_name
角色名称,只能为NORMAL ROLE,具体项目可在DBA_ROLES视图中查看。
对指定的角色启用审计策略后,被直接赋予到该角色的所有系统权限都将会被审计,即所有使用到这些权限的操作都将被审计。
示例
-- 创建角色
CREATE ROLE role_a;
-- 给角色赋予系统权限
GRANT CREATE SESSION TO role_a;
--创建角色审计策略,使能后该策略生效,使能范围内的会话连接将被审计
CREATE AUDIT POLICY audit_role_a ROLES role_a;
# when_clause
该语句用于定义是否执行审计策略的判断条件,若条件结果为true则执行审计策略,否则不执行。
# audit_condition
条件表达式,为简单的条件判断,条件结果值是true或者false。具体可为如下内容:
- 数学函数:BITAND, CEIL, FLOOR, POWER
- 字符函数:CONCAT, LOWER, UPPER
- 长度计算函数:INSTR, LENGTH
- 环境信息相关函数:SYS_CONTEXT
- 比较运算符:=, !=, <>, <, >, <=, >=
- 逻辑运算符:AND, OR
- [NOT] BETWEEN
- [NOT] IN
在审计条件表达式中使用SYS_CONTEXT不适用于分布式部署。
# evaluate per (statement|session|instance)
表示条件判断执行频率,分别对应语句级、SESSION级、实例级(一个实例运行周期里只进行一次条件判断)。
示例(单机、共享集群部署)
-- 创建审计策略,针对表area的select查询,在满足给定的条件的情况下进行审计
CREATE AUDIT POLICY up_SYS_CONTEXT
ACTIONS SELECT ON sales.area
WHEN 'SYS_CONTEXT(''USERENV'', ''OS_USER'') = ''SALES'''
EVALUATE PER SESSION;
示例
-- 创建审计策略,针对表area的select查询,在满足给定的条件的情况下进行审计
CREATE AUDIT POLICY up3
ACTIONS SELECT ON sales.area
WHEN '2>1'
EVALUATE PER SESSION;
# toplevel_clause
该语句用于定义是否对匿名块、存储过程、函数等过程体内部的SQL语句进行审计。指定ONLY TOPLEVEL则不对内部语句进行审计。
示例
-- 创建审计策略,针对执行时涉及SELECT ANY TABLE权限的语句进行审计但不针对匿名快、存储过程、函数的内部语句进行审计。
CREATE AUDIT POLICY up4
PRIVILEGES SELECT ANY TABLE
ONLY TOPLEVEL;