首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle的唯一标识符,用于唯一标识每个记录

问Oracle的唯一标识符,用于唯一标识每个记录
EN

Stack Overflow用户
提问于 2022-11-30 07:46:17
回答 1查看 40关注 0票数 0

我有一个Oracle db,其中没有定义键(主键、唯一键),我不能使用ROWID,也不能修改数据库中的任何表。我只有阅读权限。

是否有办法通过我们自己(使用Java)创建唯一标识符?

我有oracle db,我的工作是为oracle db构建java连接器代码,然后获取所有记录并在Kafka管道中发布,然后其他一些团队将使用这些记录并扫描其敏感信息,然后将这些记录发送给生产团队,以掩盖这些记录中的数据。扫描小组在第5条记录中发现了敏感信息,它们将如何传递给隐藏第5条记录的prod团队,因为没有键的定义。

因此,在发布Kafka管道中的记录时,如果表没有定义任何键,我需要使用一些引用发布记录,以便扫描团队将这些记录传递给prod进行掩蔽。我只能从db读取记录,而不能访问修改记录/表。

EN

回答 1

Stack Overflow用户

发布于 2022-11-30 08:16:14

假设源数据库是完全静态的,即只读,您可以使用散列算法为每一行生成指纹。哈希越强,得到哈希冲突的可能性就越小(但提取程序运行所需的时间也越长,因此这是一种权衡)。

你没有提到数据库版本。对于使用STANDARD_HASH sql函数的后续版本。在早期版本中,使用DBMS_CRYPTO包。在这两种情况下,您都需要连接源表的所有列,并将哈希函数应用于结果字符串。您可以从USER_TAB_COLUMNS编写动态SQL以生成所需表的语句。

为可空列提供默认值是很重要的,否则'Y'|null和null|'Y'会散列,您不希望这样做。

代码语言:javascript
复制
select  deptno
       ,dname
       ,location
       ,standard_hash(deptno||dname||nvl(location,'@@@'), 'SHA256') as hashkey
from dept;

注意:如果您的源数据库正在使用,并且可以添加或更改行,那么您就都倒霉了。但是,没有理由使用没有密钥的Oracle数据库。这是很糟糕的做法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74624360

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档