在PostgreSQL数据库中轻松匿名化数据。

pgantomizer的Python项目详细描述


https://travis-ci.org/asgeirrr/pgantomizer.svg?branch=masterhttps://coveralls.io/repos/github/asgeirrr/pgantomizer/badge.svg?branch=masterhttps://img.shields.io/badge/License-BSD%203--Clause-blue.svghttps://badge.fury.io/py/pgantomizer.svg

在PostgreSQL数据库中轻松匿名化数据。如果您需要将数据提供给 不能访问用户个人信息的人。 将数据导入到第三方工具(在第三方工具中,您无法保证数据将发生什么)也是一个常见的用例。 当gdpr在欧盟国家生效时,这个工具将派上用场。

匿名化过程

anonnimization的规则是在一个yaml文件中编写的。 在架构中必须显式标记应保留原始形式而不进行匿名化的列。 这样可以确保在数据库中添加新列而不考虑其敏感性时不会泄漏数据。 主键的默认名称是id,但可以从架构中的表中指定自定义名称。 默认情况下,主键不匿名。

下面可以检查示例yaml模式。

customer:raw:[language,currency]pk:customer_idcustomer_address:raw:[country,customer_id]custom_rules:address_line:aggregate_length

有时需要对特定列使用不同的匿名功能。 它可以在自定义规则指令中指定(参见上面的示例)。 您可以选择的功能有限。目前为止

  • aggregate_length-用列的长度替换列的内容(可用于支持length函数的任何类型)

从命令行调用pgantomizer

pgantomizer_dump是一个帮助脚本,它使用pg_dump将yaml架构文件中指定的表转储到压缩文件中。 只需将路径传递到架构和数据库连接详细信息。 利用某些必需参数的默认值的最小工作示例:

pgantomizer_dump --schema my_schema.yaml --dbname original_postgres --user alaric

要查看所有参数的列表,请运行:

pgantomizer_dump -h

脚本能够从环境变量中获取数据库连接的详细信息 遵循在docker中运行django的约定。假定变量名为: db_default_namedb_default_userdb_default_passdb_default_servicedb_default_port

pgantomizer是将postgre转储加载到指定实例中的主脚本。然后所有列 除了主键和在模式中指定为raw的主键之外,它们根据其数据类型进行匿名化。 最后,默认情况下会删除转储文件,以降低未经优化的数据泄漏的风险。 加载匿名数据的Postgres实例的连接详细信息可以作为参数传递

pgantomizer --schema my_schema.yaml --dump-file ./to_anonymize.sql --dbname anonymized_postgres --user alaric --password anonymized_pass --host localhost --port 5432

或通过具有以下名称的环境变量: 匿名数据库名匿名数据库用户匿名数据库通行证匿名数据库主机匿名数据库端口

从python调用pgantomizer

使用dump-dbload-anonymize-remove函数从python中转储匿名化数据。 在下面的示例中,通过上述env变量指定原始实例和匿名实例的db连接。

frompgantomizerimportdump_db,load_anonymize_removedump_db('to_anonymize.sql','anonymization_schema.yaml')load_anonymize_remove('to_anonymize.sql','anonymization_schema.yaml')

两个函数都有一个可选的db_args参数,用于在dict中显式地传递连接参数。 请参阅下面的示例dict的外观。

如果您仅在匿名化现有数据库之后,就有一个函数:cIT>匿名 这将有助于您在解析yaml模式时做一些额外的工作。

importyamlfrompgantomizerimportanonymize_dbanonymize_db(yaml.load(open('anonymization_schema.yaml')),{'dbname':'anonymized_postgres','user':'alaric','password':'anonymized_pass','host':'localhost','port':'5432',})

如果要改用环境变量,请使用函数匿名化。从环境中获取参数 从env构造dict。

待办事项

  • 展开此自述文件
  • 自动向PYPI提交包
  • add–dry run参数,用于检查模式并输出要执行的操作
  • 删除密码argu修改并使用getpass来提高安全性

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JAXB可以将ArrayList作为逗号分隔的值输出吗?   java使用bcel将一个内部类移动到另一个外部类   java无法识别Lucene MoreLikeThis中的错误   安卓如何在Frida中将动态类转换为json或java文件   java如何使用Struts2在blob类型的列中保存我的sql中的图像?   使用mavenreleaseplugin将java maven发布到nexus 3.0.1失败   java这是正确的方法吗?   Windows上的java Runner不工作   找不到java Hibernate+Spring xml映射   java如何访问WMI查询的数据(通过JNA)SAFEARRAY结果   java如何在本地导入库而不使用Maven中的Nexus?   java渐变本地项目依赖项   使用URLFetchService/URL Google appengine for java