Django的数据匿名器
django-scrubber的Python项目详细描述
django洗涤器
主要用例是为开发人员提供在开发过程中使用的真实数据,而不必分发客户或用户的潜在敏感信息。
为了实现这一点,在创建数据库转储期间,应该在一个步骤中插入 只需标记要匿名化的字段并调用 只需运行: 并将"django_scruber"添加到已安装的django应用程序中。即:在 为了清除数据,即:用匿名版本替换数据库数据, 有几种不同的方法来选择应该清除哪些数据,即:显式地按模型字段;或全局地按名称或字段类型。 将洗涤器直接添加到模型中,按名称将洗涤器与字段匹配: 按字段名或字段类型全局添加洗涤器: 模型洗涤器覆盖字段名称洗涤器,而字段名称洗涤器又覆盖字段类型洗涤器。 要在某些特定模型中禁用全局清理,只需将相应的字段清理器设置为 使用 默认情况下, 最后只需运行 内容的简单哈希: 目前,它使用MD5哈希,这是在各种数据库引擎中支持的。此外,由于安全性不是主要目标,较短的哈希长度比它应该替换的字段长的风险更低。 简单的擦洗器意味着用静态文本块替换文本字段。没有选择。 包装 下面将通过散列用户部分并对域部分使用 在faker的帮助下替换内容。
替换是在数据库级别完成的,因此应该能够以合理的性能处理大量数据。 faker洗涤器接受一个必需的参数:用于生成随机数据的faker提供程序。所有的Faker提供程序都受支持,您还可以注册自己的自定义提供程序。 faker将使用当前django 默认情况下,用于填充数据库的faker实例使用固定的随机种子,以确保对同一数据的不同清理产生相同的输出。如果开发人员将清理后的数据作为转储导入,这一点尤其有用,因为在故障排除过程中更改数据可能会造成混乱。 可以通过设置 清除唯一字段可能会导致整数错误,因为不能保证随机内容不会重复。为每个提供商播放不同的"scruber_random_seed"和"scruber_entries"设置可能会缓解问题。
不幸的是,由于性能原因,用于用faker清理的源数据被添加到数据库中,并且任意增加每个提供者的"清理器条目"(scruber entries)将显著减慢清理速度(除了仍然不能保证唯一性之外)。 全球洗涤器词典。键应该是作为字符串的字段名或字段类型类。值应该是 示例: 由伪造者洗涤器生成随机内容时使用的种子。将此设置为 (默认值:42) 用作faker洗涤器源的条目数。增加此值将增加生成数据的随机性,但会降低性能。 (默认值:1000) 不要试图清理不受orm管理的模型。 (默认值:true) 仅清理属于这些特定django应用程序的模型。如果未设置,将清除所有已安装的应用。 (默认值:无) 添加额外的假提供者以供伪造者使用。必须记为提供者类的全点路径。 (默认值:空列表) bumpversion用于管理版本。 将您的更改添加到更改日志中,然后运行bumpversion<;major minor patch>;,然后推送(包括标记) 此项目的所有显著更改都将记录在此文件中。 格式基于保持更改日志
这个项目坚持语义版本控制
django_scruber
是一款django应用程序,旨在帮助您匿名化项目的数据库数据。它会直接破坏数据库上的数据,因此不应在生产中使用。
django_scruber
。scrub_data
管理命令。数据将根据定义如何生成匿名内容的不同洗涤器进行替换。安装
pip install django-scrubber
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
学识
classScrubbers:somefield=scrubbers.Lorem
concat
django.db.functions.concat
以启用简单连接n个洗涤器。如果您希望通过组合(例如hash
和faker
(请参见下文)洗涤器来确保字段的唯一性,这将非常有用。faker
来生成随机电子邮件地址:classScrubbers:email=scrubbers.Concat(scrubbers.Hash('email'),models.Value('@'),scrubbers.Faker('domain_name'))
伪造者
classScrubbers:first_name=scrubbers.Faker('first_name')last_name=scrubbers.Faker('last_name')
区域设置
语言代码
初始化,并使用本地化数据填充数据库。如果要进行本地化清理,只需将其设置为其他值即可。幂等性
scruber_random_seed=none来更改此行为
,从而确保每次清理都会生成随机源数据。限制
设置
全球洗涤器
django_scruber.scrubers
中提供的一个洗涤器。
SCRUBBER_GLOBAL_SCRUBBERS={'name':scrubbers.Hash,EmailField:scrubbers.Hash,}
洗涤器随机种子
:none
意味着每次清理都将生成不同的数据。每个提供商的洗涤器条目
:洗涤器跳过非托管
:洗涤器应用程序列表
:scruber\u附加的"冒牌货"提供商
:制作新版本
更改日志
[0.3.1]-2018-09-10
已修复
hash
scruber阻塞在max-length=none的字段上
-感谢charlie denton[0.3.0]-2018-09-06
添加
hash
scruber现在也可以在sqlite上使用
更改
字段
实例作为参数,而不是字段
名字。如果根据以前的行为有自定义洗涤器,则应更新这些洗涤器。访问
对象实例中的字段名很简单:field\u instance.name
。例如:如果您有some_field=mycustomscruber
在您的任何型号的"清理器
"中,此类必须接受一个字段
实例作为第一个参数。
请注意,仍然支持使用字段名显式初始化任何内置洗涤器,因此如果
仅使用内置洗涤器,您不应受到此更改的影响。funcfield
派生类现在可以通过实现
连接设置
方法。这对于根据数据库供应商做不同的事情非常有用,并且习惯于
在sqlite上实现md5()
(参见上面添加的功能)[0.2.1]-2018-08-14
添加
更改
[0.2.0]-2018-08-13
添加
[0.1.4]-2018-08-13
更改
[0.1.3]-2018-08-13
已修复
[0.1.2]-2018-06-22
更改
[0.1.0]-2018-06-22
添加
推荐PyPI第三方库