FUNDO:
Os DBAs ocultaram o pacote DBMS_CRYPTO para qualquer função, beneficiário, e eu me pergunto por quê. Eu tenho que usar wrapper em vez :(
Existe alguma maneira de obter o mesmo hash para o campo de texto com o mesmo texto? Todos os métodos abaixo fornecem resultados diferentes para o mesmo texto, conforme parecem, dependendo do rowid ou algo semelhante:
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
Tendo enfrentado recentemente um problema semelhante, consegui obter privilégios de execução no DBMS_CRYPTO para o esquema do aplicativo, demonstrando a necessidade. Os DBAs não tiveram nenhum problema em conceder o acesso desde que fosse necessário e documentado. É a única opção real para o que você está tentando fazer. Minha função para produzir um hash SHA256 ficou assim:
Nota: não tente converter a soma de verificação bruta para qualquer outra coisa - ela só é precisa como uma soma de verificação no formato original.
DBMS_OBFUSCATION_TOOLKIT
não está mais disponível em nenhuma versão atualmente suportada do Oracle Database.Minha recomendação é que você atualize seu banco de dados para poder usar o
DBMS_CRYPTO
.