如何清理或随机化敏感数据库字段

时间:2017-01-16 15:38:54

标签: mysql django database postgresql database-security

将数据库表列列表随机化以隐藏敏感信息的最有效方法或工具是什么?

我有几个客户使用的Django应用程序,我需要让一些开发承包商在应用程序上工作。当他们处理错误时(例如,page / admin / model / 123有错误),理想情况下他们需要客户端数据库的快照才能重现并修复错误。但是,因为他们是非现场承包商,所以我希望在他们暴露客户数据库(无意或无意)的情况下降低风险。我不想向客户解释为什么他们的所有数据都是在线发布的,因为外国承包商将他的笔记本电脑留在了未锁定的汽车中。

要做到这一点,我想找到或编写一个工具来“随机化”数据库中的敏感字段,如用户名,电子邮件地址,帐号,公司名称,电话号码等,以便数据结构维护,但所有个人身份信息都被删除。

据推测,这是许多其他人不得不做的任务,但我不确定技术术语是什么,所以我通过谷歌找不到多少。使用运行MySQL或PostgreSQL后端的Django应用程序是否有任何现有工具?

2 个答案:

答案 0 :(得分:1)

Anonymize sanitize 是这项苦差事的好词。

这相对容易。使用

之类的查询
 UPDATE person
    SET name = CONCAT('Person', person_id),
        email = CONCAT('Person', person_id, '@example.com')

等等,踩踏实际的名字和电子邮件等等。保留条目的唯一性很有帮助,各种表的自动增量ID可以帮助您实现这一点。

答案 1 :(得分:1)

(添加此作为答案,因为我暂时不能发表评论。)

正如Cerin所说,O。Jones对简单字段进行匿名/清理工作的方法,但不是更复杂的方法,如地址,电话号码或需要匹配特定格式的帐号。但是,可以修改该方法以允许这样做。

我们以aaa-bbbb-ccc格式的电话号码为例,使用自动增量person_id作为唯一号码的来源。对于电话号码的ccc部分,请使用MOD(person_id,1000)。这将使person_id的剩余部分除以1000.对于bbbb,取MOD((person_id-MOD(person_id,1000))/ 1000,10000)。它看起来很复杂,但是这样做的是取person_id,删除最后三位数(用于ccc),然后除以1000.最后四位数取自结果数,用作bbbb。我想你将能够弄清楚如何计算aaa。

然后可以连接电话号码的三个部分以提供完整的电话号码:CONCAT(aaa,“ - ”,bbbb,“ - ”,ccc)

(您可能必须明确地将数字转换为字符串,我不确定)