背景:
DBA 已将 DBMS_CRYPTO 包隐藏到任何角色、受让人,我想知道为什么。我必须改用包装器:(
有没有办法为具有相同文本的文本字段获取相同的哈希?以下所有方法对相同的文本给出不同的结果,因为它们看起来取决于 rowid 或类似的东西:
SELECT
, utl_raw.cast_to_raw(sys_op_map_nonnull(log_msg)) AS "RAW"
, rawtohex(utl_raw.cast_to_raw(sys_op_map_nonnull(log_msg))) AS raw_hex
, rawtohex(standard_hash(sys_op_map_nonnull(log_msg), 'MD5')) AS md5_hex
, ora_hash(log_msg)
, dbms_obfuscation_toolkit.md5(input => utl_raw.cast_to_raw(sys_op_map_nonnull(log_msg))) AS md5
, rawtohex(dbms_obfuscation_toolkit.md5(input => utl_raw.cast_to_raw(sys_op_map_nonnull(log_msg)))) AS hex
log_msg
是 CLOB
最近我自己也遇到了类似的问题,通过演示需求,我能够获得应用程序模式的 DBMS_CRYPTO 的执行权限。只要需要并记录在案,DBA 授予访问权限就没有任何问题。这是您尝试做的唯一真正的选择。我生成 SHA256 哈希的函数最终看起来像这样:
注意:不要尝试将原始校验和转换为其他任何东西 - 它仅作为原始格式的校验和是准确的。
DBMS_OBFUSCATION_TOOLKIT
不再适用于任何当前支持的 Oracle 数据库版本。我的建议是让您升级您的数据库,以便您可以使用
DBMS_CRYPTO
.