【问题标题】:On the fly anonymisation of a MySQL dumpMySQL转储的动态匿名化
【发布时间】:2013-01-07 15:55:40
【问题描述】:

我正在使用 mysqldump 创建供开发人员使用的实时应用程序的 DB 转储。

此数据包含客户数据。我想匿名化这些数据,即删除客户姓名/信用卡数据。

一个选项是:

  • 创建数据库副本(创建转储和导入转储)
  • 触发对数据进行匿名化的 SQL 查询
  • 转储新数据库

但这需要很多开销。 更好的解决方案是在转储创建期间进行匿名化。

我想我最终会解析所有mysqlsqldump 输出?有没有更智能的解决方案?

【问题讨论】:

    标签: php mysqldump anonymize


    【解决方案1】:

    如果要随机化数据,为什么要从表中进行选择?

    对可安全转储数据的表(配置表等)进行mysqldump,对敏感表仅使用结构进行mysqldump

    然后,在您的应用程序中,您可以根据随机创建的数据为敏感表构造 INSERT 语句。

    【讨论】:

    • 但是我仍然需要重新创建 mysqldump 逻辑(用于创建那些插入)。我想避免这种情况。
    • 您不是在重新创建 mysqldump 逻辑,而是在构建 SQL 查询。 mysqldump 的工作是转储表中的数据并将其反向工程回查询。但是您不想要表格中的数据……您想要自己的数据。
    • 好点。但即使在受影响的表中,10 个字段中有 8 个会保持原样。所以我想要mysqldump 逻辑但也想要自己的数据。
    【解决方案2】:

    你可以试试 Myanon:https://myanon.io

    在转储过程中即时完成匿名化:

    mysqldump | myanon -f db.conf | gzip > anon.sql.gz
    

    【讨论】:

      【解决方案3】:

      几天前我不得不开发类似的东西。我做不到INTO OUTFILE,因为数据库是AWS RDS。我最终采用了这种方法:

      从某个表中以表格文本形式转储数据:

      mysql -B -e 'SELECT `address`.`id`, "address1" , "address2", "address3", "town", "00000000000" as `contact_number`, "example@example.com" as `email` FROM `address`' some_db > addresses.txt
      

      然后导入它:

      mysql --local-infile=1 -e "LOAD DATA LOCAL INFILE 'addresses.txt' INTO TABLE \`address\` FIELDS TERMINATED BY '\t' ENCLOSED BY '\"' IGNORE 1 LINES" some_db
      

      只需要mysql 命令来执行此操作。

      由于导出非常快(大约 30.000 行只需几秒钟),导入过程会慢一些,但仍然可以。我不得不在途中加入几张桌子,并且有一些外键,所以如果你不需要它肯定会更快。此外,如果您在导入时禁用外键检查,也会加快速度。

      【讨论】:

        【解决方案4】:

        您可以选择每个表(而不是选择 *)并指定您想要拥有的列并省略或空白那些您不想拥有的列,然后为每个查询使用 phpmyadmin 的导出选项.

        【讨论】:

          【解决方案5】:

          您还可以使用SELECT 查询中的 SELECT ... INTO OUTFILE 语法通过列过滤器进行转储。

          【讨论】:

          • 它可以导出 MySQL 语句吗 - 我认为它只能执行 CSV 和类似的操作。
          • +1 SELECT uid, name, 'test@example.org' AS email INTO OUTFILE '/tmp/anonymised.sql' FROM usersLOAD DATA INFILE '/tmp/anonymised.sql' INTO TABLE users 似乎可以很好地协同工作。我会从那里开始。
          【解决方案6】:

          我发现了类似的问题,但您想要的似乎没有简单的解决方案。您必须自己编写自定义导出。

          【讨论】:

            【解决方案7】:

            phpMyAdmin 为基于 SQL 查询的 SQL 格式提供导出选项。可以选择从 PHPmyadmin 中提取此代码(可能已经过良好测试)并在此应用程序中使用它。

            代码参考phpMyAdmin export plugin - exportData method

            【讨论】:

              猜你喜欢
              • 2015-02-21
              • 1970-01-01
              • 2012-01-17
              • 1970-01-01
              • 2012-05-31
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多