Django的数据匿名器

django-scrubber的Python项目详细描述


django洗涤器

构建状态pypi

django_scruber是一款django应用程序,旨在帮助您匿名化项目的数据库数据。它会直接破坏数据库上的数据,因此不应在生产中使用

主要用例是为开发人员提供在开发过程中使用的真实数据,而不必分发客户或用户的潜在敏感信息。 为了实现这一点,在创建数据库转储期间,应该在一个步骤中插入django_scruber

只需标记要匿名化的字段并调用scrub_data管理命令。数据将根据定义如何生成匿名内容的不同洗涤器进行替换。

安装

只需运行:

pip install django-scrubber

并将"django_scruber"添加到已安装的django应用程序中。即:在settings.py中添加:

INSTALLED_APPS = [
  ...
  'django_scrubber',
  ...
]

清除数据

为了清除数据,即:用匿名版本替换数据库数据,django scruber必须知道它应该作用于哪些模型和字段,以及应该如何替换数据。

有几种不同的方法来选择应该清除哪些数据,即:显式地按模型字段;或全局地按名称或字段类型。

将洗涤器直接添加到模型中,按名称将洗涤器与字段匹配:

classMyModel(Model):somefield=CharField()classScrubbers:somefield=scrubbers.Hash('somefield')

按字段名或字段类型全局添加洗涤器:

# (in settings.py)SCRUBBER_GLOBAL_SCRUBBERS={'name':scrubbers.Hash,EmailField:scrubbers.Hash,}

模型洗涤器覆盖字段名称洗涤器,而字段名称洗涤器又覆盖字段类型洗涤器。

要在某些特定模型中禁用全局清理,只需将相应的字段清理器设置为none

使用django_scruber.scrubers中提供的一个洗涤器确定将使用哪种机制来清除选定的数据。请参阅下面的列表。 或者,值可以是任何可以在queryset.update()调用中用作值的值(例如func实例、字符串文本等),或者任何当用字段对象作为参数调用时返回此类对象的可调用的

默认情况下,django_scruber将影响所有注册应用程序中的所有模型。如果全局清理程序过于通用,这可能会导致第三方应用程序出现问题。这可以通过scruber_apps_list设置来避免。使用此选项,您可以将已安装的应用程序拆分为多个系统应用程序和本地应用程序,然后将scruber apps list=local应用程序设置为只清理您自己的应用程序。

最后只需运行/manage.py scrub_data以破坏性方式清除注册字段即可。

内置洗涤器

散列

内容的简单哈希:

classScrubbers:somefield=scrubbers.Hash# will use the field itself as sourcesomeotherfield=scrubbers.Hash('somefield')# can optionally pass a different field name as hashing source

目前,它使用MD5哈希,这是在各种数据库引擎中支持的。此外,由于安全性不是主要目标,较短的哈希长度比它应该替换的字段长的风险更低。

学识

简单的擦洗器意味着用静态文本块替换文本字段。没有选择。

classScrubbers:somefield=scrubbers.Lorem

concat

包装django.db.functions.concat以启用简单连接n个洗涤器。如果您希望通过组合(例如hashfaker(请参见下文)洗涤器来确保字段的唯一性,这将非常有用。

下面将通过散列用户部分并对域部分使用faker来生成随机电子邮件地址:

classScrubbers:email=scrubbers.Concat(scrubbers.Hash('email'),models.Value('@'),scrubbers.Faker('domain_name'))

伪造者

在faker的帮助下替换内容。

classScrubbers:first_name=scrubbers.Faker('first_name')last_name=scrubbers.Faker('last_name')

替换是在数据库级别完成的,因此应该能够以合理的性能处理大量数据。

faker洗涤器接受一个必需的参数:用于生成随机数据的faker提供程序。所有的Faker提供程序都受支持,您还可以注册自己的自定义提供程序。

区域设置

faker将使用当前django语言代码初始化,并使用本地化数据填充数据库。如果要进行本地化清理,只需将其设置为其他值即可。

幂等性

默认情况下,用于填充数据库的faker实例使用固定的随机种子,以确保对同一数据的不同清理产生相同的输出。如果开发人员将清理后的数据作为转储导入,这一点尤其有用,因为在故障排除过程中更改数据可能会造成混乱。

可以通过设置scruber_random_seed=none来更改此行为,从而确保每次清理都会生成随机源数据。

限制

清除唯一字段可能会导致整数错误,因为不能保证随机内容不会重复。为每个提供商播放不同的"scruber_random_seed"和"scruber_entries"设置可能会缓解问题。 不幸的是,由于性能原因,用于用faker清理的源数据被添加到数据库中,并且任意增加每个提供者的"清理器条目"(scruber entries)将显著减慢清理速度(除了仍然不能保证唯一性之外)。

设置

全球洗涤器

全球洗涤器词典。键应该是作为字符串的字段名或字段类型类。值应该是django_scruber.scrubers中提供的一个洗涤器。

示例:

SCRUBBER_GLOBAL_SCRUBBERS={'name':scrubbers.Hash,EmailField:scrubbers.Hash,}

洗涤器随机种子

由伪造者洗涤器生成随机内容时使用的种子。将此设置为none意味着每次清理都将生成不同的数据。

(默认值:42)

每个提供商的洗涤器条目

用作faker洗涤器源的条目数。增加此值将增加生成数据的随机性,但会降低性能。

(默认值:1000)

洗涤器跳过非托管

不要试图清理不受orm管理的模型。

(默认值:true)

洗涤器应用程序列表

仅清理属于这些特定django应用程序的模型。如果未设置,将清除所有已安装的应用。

(默认值:无)

scruber\u附加的"冒牌货"提供商

添加额外的假提供者以供伪造者使用。必须记为提供者类的全点路径。

(默认值:空列表)

制作新版本

bumpversion用于管理版本。

将您的更改添加到更改日志中,然后运行bumpversion<;major minor patch>;,然后推送(包括标记)

更改日志

此项目的所有显著更改都将记录在此文件中。

格式基于保持更改日志 这个项目坚持语义版本控制

[0.3.1]-2018-09-10

已修复

[0.3.0]-2018-09-06

添加

  • 最后添加了一些基本测试(感谢marco de felice
  • hashscruber现在也可以在sqlite上使用

更改

  • 中断:延迟初始化的清理程序现在接收字段实例作为参数,而不是字段 名字。如果根据以前的行为有自定义洗涤器,则应更新这些洗涤器。访问 对象实例中的字段名很简单:field\u instance.name。例如:如果您有some_field=mycustomscruber 在您的任何型号的"清理器"中,此类必须接受一个字段实例作为第一个参数。 请注意,仍然支持使用字段名显式初始化任何内置洗涤器,因此如果 仅使用内置洗涤器,您不应受到此更改的影响。
  • 与上述相关,funcfield派生类现在可以通过实现 连接设置方法。这对于根据数据库供应商做不同的事情非常有用,并且习惯于 在sqlite上实现md5()(参见上面添加的功能)
  • 清理时忽略代理模型(感谢marco de felice
  • 展开测试以包括Python3.7和Django 2.1

[0.2.1]-2018-08-14

添加

  • 从管理命令中仅清除一个模型的选项
  • 通过配置设置scruber_additional_faker_providers支持加载其他Faker提供程序

更改

[0.2.0]-2018-08-13

添加

[0.1.4]-2018-08-13

更改

[0.1.3]-2018-08-13

已修复

[0.1.2]-2018-06-22

更改

  • 使用bumpversion和travis制作新版本
  • 重命名项目:django_scruber→django scruber

[0.1.0]-2018-06-22

添加

  • 初始版本

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

推荐PyPI第三方库


热门话题
java中char的用途   swing修复,以便显示可以同时显示十进制数和整数   java给定一个场景,找到拥有的JFXPanel   java JPA 2标准获取路径导航   java如何用JUnit测试这个类?   JSF中的java请求作用域   Spring云Zuul代理背后的java Spring OAuth授权服务器   java限制聚合返回的存储桶大小   java如何在安卓应用程序中请求超级su权限   防止超级关键字的java Checkstyle规则   java 安卓。应用程序。应用程序无法强制转换到安卓。应用程序。在回收器适配器中使用FragmentManager时的活动   使用Java的Twitter广告API   切换到4.0.1版本后,java“JavaMailSenderImpl无法解析为类型”   java没有getter方法可用于名称下bean的属性   java 0/1背包堆空间   java我无法使用断点进行调试   Jar文件名表单java代码   java调用从扩展活动的MainActivity类扩展片段的类片段