clickhouse-obfuscator
一个简单的表数据混淆工具。
它读取输入表并生成输出表,保持输入表的一些属性,但包含不同的数据。它允许发布几乎真实的生产数据,以便用于基准测试。
它旨在保留以下数据属性:
-
每列和每组列的值的基数(不同值的数量);
-
条件基数:在另一个列的值条件下,一个列的不同值的数量;
-
整数绝对值的概率分布;带符号整数的符号;浮点数的指数和符号;
-
字符串长度的概率分布;
-
数字的零值概率;空字符串和数组,
NULL
s; -
在使用 LZ77 和熵系列编解码器压缩时的数据压缩比;
-
表中时间值的连续性(差异的大小);浮点值的连续性;
-
DateTime
值的日期部分; -
字符串值的 UTF-8 有效性;
-
字符串值看起来自然。
以上大多数属性适用于性能测试:
读取数据、过滤、聚合和排序的速度几乎与原始数据相同,因为保持了基数、大小、压缩比等。
它以确定性方式工作:您定义一个种子值,转换由输入数据和种子确定。一些转换是一对一的,可以被逆转,因此您需要有一个大的种子并将其保密。
它使用一些密码学原语来转换数据,但从密码学的角度来看,它并没有做到正确,因此除非您有其他原因,否则不应将结果视为安全。结果可能保留一些您不希望发布的数据。
它总是将 0、1、-1 的数字、日期、数组长度和空值标志保持与源数据完全相同。比如说,您在表中有一个 IsMobile
列,值为 0 和 1。在转换后的数据中,它将保持相同的值。
因此,用户将能够精确计算移动流量的比例。
举一个其他的例子。当您的表中有一些私密数据,比如用户电子邮件,而您不想发布任何一个电子邮件地址。如果您的表足够大,并包含多个不同的电子邮件,并且没有电子邮件的频率远高于其他电子邮件,它将对所有数据进行匿名化。但如果您在一列中有少量不同的值,它可能会重现其中的某些值。您应该查看该工具的工作算法,并微调其命令行参数。
此工具仅在至少有适度数量的数据(至少 1000 行)时效果良好。