唯一标识符,用于唯一标识每条记录



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

是否有一种方法来创建我们自己的唯一标识符(使用Java)?

我有oracle db,我的工作是为oracle db构建java连接器代码,然后获取所有记录并在Kafka管道中发布,然后其他一些团队将消费记录并扫描敏感信息,然后他们将这些记录发送给生产团队以掩盖这些记录中的数据。扫描团队发现假设在第5条记录中敏感信息,他们将如何传达给掩盖第5条记录的生产团队,因为没有定义密钥。

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

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

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

为可空列提供默认值是很重要的,否则'Y'|nullnull|'Y'会散列相同,这是您不希望看到的。

select  deptno
,dname
,location
,standard_hash(deptno||dname||nvl(location,'@@@'), 'SHA256') as hashkey
from dept;

注意:如果您的源数据库正在使用中,并且可以添加或更改行,那么您都不走运。但是,没有理由让Oracle数据库没有键。那简直是拙劣的做法。

最新更新