Sql 在oracle表列中混淆名称
我的要求是为了如下所示的混淆目的,将oracle表中的名称混在一起 规则Sql 在oracle表列中混淆名称,sql,oracle,oracle12c,obfuscation,Sql,Oracle,Oracle12c,Obfuscation,我的要求是为了如下所示的混淆目的,将oracle表中的名称混在一起 规则 同一记录不应具有相同的名称 应根据性别进行混淆 逻辑应该是完全随机的 表员工 身份证件 名称 性别 1. 彼得 M 2. 帕斯卡 M 3. 罗宾 M 4. 斯蒂芬妮 F 5. 艾莉亚 F 您可以使用row\u number(),将每个性别的姓名随机化: 这并不保证名称永远不会被重复使用。事实上,考虑到其他限制,这是不可能的——一个性别可能只有一个名字。但是,这会随机分配名称,因此不太可能保持相同的名称 如果您的姓名可以重复
您可以使用
row\u number()
,将每个性别的姓名随机化:
这并不保证名称永远不会被重复使用。事实上,考虑到其他限制,这是不可能的——一个性别可能只有一个名字。但是,这会随机分配名称,因此不太可能保持相同的名称
如果您的姓名可以重复,请使用densite\u rank()
而不是row\u number()
他是一把小提琴
通过使用“移位”方法,可以避免将名称映射回相同的名称。然而,这种转变是可以撤销的。以很小的重新分配概率随机分配姓名的解决方案可能更适合混淆。您可以使用
行数()在每个性别中随机分配姓名。
:
这并不保证名称永远不会被重复使用。事实上,考虑到其他限制,这是不可能的——一个性别可能只有一个名字。但是,这会随机分配名称,因此不太可能保持相同的名称
如果您的姓名可以重复,请使用densite\u rank()
而不是row\u number()
他是一把小提琴
通过使用“移位”方法,可以避免将名称映射回相同的名称。然而,这种转变是可以撤销的。随机分配名称的解决方案(重新分配的概率非常小)可能更适合于模糊处理。我认为,如果已知名称是随机分配的,用于模糊处理,那么,尽管OP有“要求”,偶尔使用“真实”名称其实并不重要因此,我认为,如果已知这些名字是为了混淆而随机产生的,那么偶尔使用“真实”的名字就无关紧要了,尽管OP对此有“要求”。
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;