OceanBase 缺少 dbms_obfuscation_toolkit.md5 包函数的解决方案

因为 dbms_obfuscation_toolkit.md5 是一个 Oracle 不推荐继续使用的函数,所以 OceanBase 没有对其兼容,取而代之的是兼容了 dbms_crypto.hash,其用法详见这篇 KB

但是,并不是所有业务都接受修改源码,因为复杂系统里,涉及到的修改点可能无法枚举。

这里提供一种临时解决方案:使用 OceanBase PL/SQL 实现一个 dbms_obfuscation_toolkit.md5 系统包,源码如下:

sql 复制代码
## 创建包 DBMS_OBFUSCATION_TOOLKIT 
CREATE OR REPLACE PACKAGE DBMS_OBFUSCATION_TOOLKIT
    IS
        FUNCTION MD5(input_string VARCHAR2)
          RETURN varchar2;
    END DBMS_OBFUSCATION_TOOLKIT;
/

## 创建包体 DBMS_OBFUSCATION_TOOLKIT
CREATE OR REPLACE PACKAGE BODY DBMS_OBFUSCATION_TOOLKIT
 IS 
    FUNCTION MD5(input_string VARCHAR2)
        RETURN varchar2
        IS 
    BEGIN
        RETURN UTL_RAW.CAST_TO_VARCHAR2(dbms_crypto.hash(utl_raw.cast_to_raw(input_string), 2));
    END MD5;
END DBMS_OBFUSCATION_TOOLKIT;
/

测试效果如下:

sql 复制代码
OceanBase(TEST@TEST)>SELECT rawtohex(dbms_crypto.hash(utl_raw.cast_to_raw('hello world'),2 /*dbms_crypto.HASH_MD5*/)) md5 FROM dual;
+----------------------------------+
| MD5                              |
+----------------------------------+
| 5EB63BBBE01EEED093CB22BB8F5ACDC3 |
+----------------------------------+
1 row in set (0.000 sec)

OceanBase(TEST@TEST)>SELECT utl_raw.cast_to_raw(dbms_obfuscation_toolkit.md5(input_string => 'hello world')) md5 FROM dual;
+----------------------------------+
| MD5                              |
+----------------------------------+
| 5EB63BBBE01EEED093CB22BB8F5ACDC3 |
+----------------------------------+
1 row in set (0.039 sec)

可见,上述 PL 代码完全实现了相关功能。

这个思路可以延伸到很多缺 PL 包的场景,我们很多时候可以使用自定义的 PL 包来模拟缺失的内容。当然,这个主要集中在计算领域,如果是要做一些网络 IO,就麻烦很多,比如 HTTP 相关的包,就很难模拟。

相关推荐
OceanBase数据库官方博客12 天前
蚂蚁集团 CTO 何征宇:AGI时代,海量数据带来的质变|OceanBase 开发者大会实录
人工智能·oceanbase·分布式数据库·开发者大会
数据最前线14 天前
OceanBase 开发者大会,拥抱 Data*AI 战略,构建 AI 数据底座
人工智能·oceanbase
久绊A16 天前
OceanBase 共享存储:云原生数据库的存储
数据库·云原生·oceanbase
OceanBase数据库官方博客19 天前
如何分析动态采样引起的计划不稳定 | OceanBase SQL 调优实践
sql·oceanbase·分布式数据库
OceanBase数据库官方博客19 天前
OceanBase 开发者大会:详解 Data × AI 战略,数据库一体化架构再升级
ai·oceanbase·分布式数据库·开发者大会
OceanBase数据库官方博客23 天前
OAT 初始化时出错?问题可能出在 PAM 配置上|OceanBase 故障排查实践
oceanbase·分布式数据库·故障排查
GottdesKrieges1 个月前
OceanBase性能关键参数配置最佳实践
linux·oceanbase
wei_shuo1 个月前
高性能数据库架构探索:OceanBase 分布式技术深入解析
分布式·oceanbase·数据库架构
GottdesKrieges1 个月前
OceanBase租户扩缩容的三种方法
数据库·oceanbase
枫叶20001 个月前
OceanBase数据库-学习笔记4-租户
数据库·笔记·学习·oceanbase