【问题标题】:How to sanitize or randomize sensitive database fields如何清理或随机化敏感的数据库字段
【发布时间】:2017-05-31 11:59:29
【问题描述】:

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

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

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

据推测,这是许多其他人必须完成的任务,但我不确定技术术语是什么,所以我通过 Google 找不到太多信息。是否有任何现有工具可以使用运行 MySQL 或 PostgreSQL 后端的 Django 应用程序来执行此操作?

【问题讨论】:

    标签: mysql django database postgresql database-security


    【解决方案1】:

    Anonymizesanitize 是处理这项工作的好词。

    这相对容易做到。使用像

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

    等等,以消除实际姓名和电子邮件等等。保持条目的唯一性很有帮助,并且各种表的自动递增 ID 可以帮助您做到这一点。

    【讨论】:

    • 这可能适用于简单字段,但不适用于更复杂的字段,例如地址、电话号码或需要匹配特定格式但仍具有全球唯一性的帐号。跨度>
    【解决方案2】:

    (添加这个作为答案,因为我还不能发表评论。)

    正如 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)

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多