在表列 oracle 中混淆名称

Posted

技术标签:

【中文标题】在表列 oracle 中混淆名称【英文标题】:Jumble up names in the table column oracle 【发布时间】:2021-05-31 06:52:39 【问题描述】:

我的要求是为了混淆目的将 oracle 表中的名称混在一起,如下所示

规则

    同一记录不应具有相同的名称 应根据性别进行混编 逻辑应该是完全随机的

员工

ID Name Gender
1 Peter M
2 Pascal M
3 Robin M
4 Stephanie F
5 Arya F

员工-预期

ID Name Gender
1 Robin M
2 Peter M
3 Pascal M
4 Arya F
5 Stephanie F

下面的链接中提到了我到目前为止所尝试的内容,但不知何故我无法修复它,因为数据可能以数百万计 http://sqlfiddle.com/#!4/460bda/5

【问题讨论】:

【参考方案1】:

您可以使用row_number() 随机化每个性别中的名称:

select e.*, e2.name as new_name
from (select e.*,
             row_number() over (partition by gender order by name) as seqnum
      from employee e
     ) e join
     (select e.*,
             row_number() over (partition by gender order by dbms_random.random()) as seqnum
      from employee e
     ) e2
     on e.gender = e2.gender and e.seqnum = e2.seqnum;

这并不能保证永远不会重复使用名称。事实上,考虑到其他限制,这是不可能的——一个性别可能只有一个名字。但是,这会随机分配名称,因此不太可能保持相同的名称。

如果您的姓名可以重复,请使用dense_rank() 而不是row_number()

Here 是一个 dbfiddle。

您可以使用“转移”方法避免将名称映射回相同的名称。然而,这种转变是可以撤销的。随机分配重新分配概率很小的名称的解决方案可能更适合混淆。

【讨论】:

我认为,如果已知名称是出于混淆目的而随机化的,那么尽管有 OP 的规定,偶尔使用“真实”名称也没关系“要求”。

以上是关于在表列 oracle 中混淆名称的主要内容,如果未能解决你的问题,请参考以下文章

如何混淆非托管 dll 的函数名称

Proguard (R8) 混淆自定义视图名称

如何在 confuserex 中用密码混淆符号名称?

如何根据预测的类别概率准备混淆矩阵?

Pig:Relation 和 Schema 名称混淆

Android 安装包优化资源混淆 ( resources.arsc 资源映射表混淆 | resources.arsc 资源映射表二进制格式分析 | 混淆全局字符串池和资源名称字符串池 )