gpt4 book ai didi

Oracle 数据脱敏

转载 作者:行者123 更新时间:2023-12-02 04:44:42 28 4
gpt4 key购买 nike

我们有一个要求,即使用 Oracle 函数来屏蔽特定的表列,该函数提供持久的屏蔽输出字符串。

  • 我们尝试了 Oracle Hash Function,但它没有给出 String 类型的返回值。
  • 我们尝试了 Oracle Random 函数 (dbms_random.string),但它没有提供持久输出字符串。

我在互联网上读到这称为确定性掩蔽。但我们不想使用 Oracle Enterprise Manager;但是我们需要一个直接的 Oracle 函数。

请提出建议。

最佳答案

这个问题在 12c 中可以通过函数 STANDARD_HASH 轻松解决.

以前版本中的解决方案只是稍微复杂一些。围绕 DBMS_CRYPTO 构建一个简单的包装器,其作用类似于 STANDARD_HASH:

--Imitation of the 12c function with the same name.
--Remember to drop this function when you upgrade!
create or replace function standard_hash(
p_string varchar2,
p_method varchar2 default 'SHA1'
) return varchar2 is
v_method number;
v_invalid_identifier exception;
pragma exception_init(v_invalid_identifier, -904);
begin
--Intentionally case-sensitive, just like the 12c version.
if p_method = 'SHA1' then
v_method := dbms_crypto.hash_sh1;
--These algorithms are only available in 12c and above.
$IF NOT DBMS_DB_VERSION.VER_LE_11 $THEN
elsif p_method = 'SHA256' then
v_method := dbms_crypto.hash_sh256;
elsif p_method = 'SHA384' then
v_method := dbms_crypto.hash_sh384;
elsif p_method = 'SHA512' then
v_method := dbms_crypto.hash_sh512;
$END
elsif p_method = 'MD5' then
v_method := dbms_crypto.hash_md5;
else
raise v_invalid_identifier;
end if;

return rawToHex(dbms_crypto.hash(utl_raw.cast_to_raw(p_string), v_method));
end;
/

您可能需要使用 SYS 登录并授予您的用户对 DBMS_CRYPTO 的访问权限才能使该功能正常工作:

grant execute on sys.dbms_crypto to <your_schema>;

创建一个公共(public)同义词,将其授予每个人,其工作方式完全相同。

create public synonym standard_hash for <schema with function>.standard_hash;
grant execute on standard_hash to public;

select standard_hash('Some text', 'MD5') from dual;
9DB5682A4D778CA2CB79580BDB67083F

select standard_hash('Some text', 'md5') from dual;
ORA-00904: : invalid identifier

这是一个使用该函数的简单示例:

update some_table
set column1 = standard_hash(column1),
column2 = standard_hash(column2);

但是更新大量数据可能会很慢。创建新表、删除旧表、重命名新表等可能会更快。并且散列值可能大于列大小,可能需要 alter table some_table edit column1 varchar2(40字节);

令我惊讶的是有这么多产品和工具可以完成如此​​简单的事情。

关于Oracle 数据脱敏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22551395/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com