Oracle Blockchain Table 详解

Oracle Blockchain Table 详解

适用版本:Oracle Database 21c / 23ai(19c 有限支持) 文档版本:v1.0 / 2026-07


1. 概述

Blockchain Table 是防篡改表[1]:

详细见:Oracle 安全深度解析Oracle Audit 与 Unified Audit Trail


2. 特性

2.1 防篡改

- 只能 INSERT
- 不能 UPDATE/DELETE
- 链式

2.2 哈希链

- 行哈希
- 前行哈希
- 链式

2.3 审计

- 用户签名
- 非对称
- 验证

3. 创建

3.1 基本语法

CREATE BLOCKCHAIN TABLE bank_ledger (
  bank_id VARCHAR2(128) NOT NULL,
  tx_id NUMBER NOT NULL,
  amount NUMBER NOT NULL
)
NO DROP UNTIL 31 DAYS AFTER INSERT
NO DELETE UNTIL 16 DAYS AFTER INSERT
HASHING USING "SHA2_512" VERSION "v1";

3.2 参数

- NO DROP:不可删表
- NO DELETE:不可删行
- HASHING:哈希算法
- VERSION:版本

4. 插入

4.1 INSERT

INSERT INTO bank_ledger VALUES ('B001', 1, 100);
INSERT INTO bank_ledger VALUES ('B001', 2, 200);
COMMIT;

4.2 限制

- 只能 INSERT
- 不能 UPDATE
- 不能 DELETE
- 不能 TRUNCATE

5. 验证

5.1 链验证

SELECT * FROM bank_ledger 
WHERE ORABC_HASH = ...;

5.2 DBMS_BLOCKCHAIN_TABLE

BEGIN
  DBMS_BLOCKCHAIN_TABLE.VERIFY_ROWS(
    schema_name => 'SCOTT',
    table_name => 'BANK_LEDGER'
  );
END;
/

5.3 签名

-- 用户签名
INSERT INTO bank_ledger (...) 
  VALUES (..., SYS_CONTEXT('USERENV', 'SESSION_USER'));

6. 查看

6.1 视图

SELECT * FROM user_blockchain_tables;
SELECT * FROM all_blockchain_tables;

6.2 隐藏列

SELECT ORABC_HASH, ORABC_SEQ_NUM, ORABC_USER_SIG 
FROM bank_ledger;

7. 保留策略

7.1 NO DROP

- 31 DAYS
- 不可删表
- 保留期

7.2 NO DELETE

- 16 DAYS
- 不可删行
- 保留期

7.3 调整

ALTER TABLE bank_ledger NO DELETE UNTIL 32 DAYS AFTER INSERT;
-- 只能延长

8. 应用场景

8.1 金融

- 账本
- 交易
- 防篡改

8.2 审计

- 审计日志
- 合规
- 不可变

8.3 供应链

- 溯源
- 链式
- 验证

9. 性能

9.1 优势

- 防篡改
- 审计
- 合规

9.2 开销

- 哈希计算
- 签名
- 监控

9.3 限制

- 只能 INSERT
- 保留期
- 大小

10. 监控

10.1 视图

SELECT table_name, row_retention, hash_algorithm
FROM user_blockchain_tables;

10.2 大小

SELECT segment_name, bytes/1024/1024 AS mb
FROM user_segments
WHERE segment_name = 'BANK_LEDGER';

11. 常见问题

11.1 ORA-05715

- 不允许操作
- 检查

11.2 保留期

- 未到期
- 不能删除

11.3 性能

- 哈希开销
- 监控

12. 最佳实践

  1. 保留期:合理
  2. 哈希:SHA2_512
  3. 签名:用户
  4. 监控:大小
  5. 审计:定期验证
  6. 测试:完整性
  7. 文档:设计
  8. 合规:审计
  9. 归档:策略
  10. 演练:定期

13. 参考资料

[1] Oracle Database Administrator’s Guide 23ai, “Blockchain Tables” https://docs.oracle.com/en/database/oracle/oracle-database/23/admin/