#HIST_CHECK
HIST_CHECK高级包提供了一组内置的存储过程/函数,用于开启/关闭指定表的防篡改功能、校验指定表是否发生过篡改。
篡改主要是指对目标表执行了增、删、改等操作,执行方式包括:
- 直接修改:对表执行INSERT/DELETE/UPDATE/TRUNCATE等SQL语句。
- 间接修改:通过LOAD DATA导入表数据、通过DBMS_LOB高级包修改表数据等。
该内置高级包仅适用于单机HEAP表,且不能为系统表。
开启/关闭/校验均需要当前用户对指定表具有READ/SELECT权限。
# ENABLE_CHECK
HIST_CHECK.ENABLE_CHECK (
user_name VARCHAR,
table_name VARCHAR
);
此存储过程用于对指定表开启防篡改能力。
参数 | 描述 |
---|---|
user_name | 用户名 |
table_name | 表名 |
示例(单机HEAP表)
BEGIN
HIST_CHECK.ENABLE_CHECK('sales','orders_info');
END;
/
# DISABLE_CHECK
HIST_CHECK.DISABLE_CHECK (
user_name VARCHAR,
table_name VARCHAR
);
此存储过程用于对指定表关闭防篡改能力。
参数 | 描述 |
---|---|
user_name | 用户名 |
table_name | 表名 |
示例(单机HEAP表)
BEGIN
HIST_CHECK.DISABLE_CHECK('sales','orders_info');
END;
/
# ACHECK
HIST_CHECK.ACHECK (
user_name VARCHAR,
table_name VARCHAR
);
此函数用于对指定表校验是否发生篡改,返回结果为TRUE或FALSE。
TRUE:表示未发生篡改或防篡改功能暂未开启。
FALSE:表示从开启防篡改功能至今,发生过篡改。
参数 | 描述 |
---|---|
user_name | 用户名 |
table_name | 表名 |
示例(单机HEAP表)
-- 当指定表未开启防篡改能力/未发生篡改时,校验函数返回TRUE。
SELECT HIST_CHECK.ACHECK('sales','orders_info') ACHECK FROM dual;
ACHECK
--------------------
true
-- 当指定表开启防篡改能力,在发生篡改操作后,校验函数将返回FALSE。
EXEC HIST_CHECK.ENABLE_CHECK('sales','orders_info');
UPDATE orders_info SET area='01' WHERE order_no='20210102020002';
SELECT HIST_CHECK.ACHECK('sales','orders_info') ACHECK FROM dual;
ACHECK
--------------------
false