3.4 KiB
slug | title |
---|---|
/ja/operations/utilities/clickhouse-obfuscator | clickhouse-obfuscator |
テーブルデータの難読化のためのシンプルなツールです。
このツールは入力テーブルを読み込み、一部の特性を保持しつつ異なるデータを含む出力テーブルを生成します。 この方法は、ベンチマークで使用するために実際の本番データに近いデータを公開することを可能にします。
このツールは以下のデータの特性を保持するように設計されています:
-
各カラムおよびカラムの組の値の基数(異なる値の数)
-
条件付き基数:別のカラムの値を条件にした場合のあるカラムの異なる値の数
-
整数の絶対値の確率分布;符号付き整数の符号;浮動小数点数の指数と符号
-
文字列の長さの確率分布
-
数値のゼロ値、空文字列と配列、
NULL
の確率 -
LZ77やエントロピー系のコーデックで圧縮された場合のデータ圧縮率
-
テーブル内の時間値の連続性(差異の大きさ);浮動小数点値の連続性
-
DateTime
値の日付要素 -
文字列値のUTF-8の妥当性
-
文字列値が自然に見えること
上記の特性の多くはパフォーマンステストに有効です:
データの読み取り、フィルタリング、集計、およびソートは、基数、大小、圧縮率などが保存されているため、元のデータとほぼ同じ速度で動作します。
動作は決定的です:シード値を定義し、変換は入力データとシードによって決定されます。 いくつかの変換は一対一で逆にすることができるため、大きなシードを持ち、それを秘密にしておく必要があります。
データを変換するためにいくつかの暗号化プリミティブを使用していますが、暗号化の観点からは適切に行われていないため、他の理由がない限り結果を安全とみなすべきではありません。結果は公開したくないデータを一部保持している可能性があります。
0, 1, -1の数値、日付、配列の長さ、ヌルフラグは常にソースデータとまったく同じになります。
例えば、テーブル内にIsMobile
というカラムがあり、値が0と1である場合、変換されたデータでも同じ値を保持します。
したがって、ユーザーは正確なモバイルトラフィックの割合をカウントすることができます。
別の例を示します。テーブル内にユーザーのメールアドレスのようなプライベートデータがあり、単一のメールアドレスを公開したくない場合、 テーブルが十分に大きく、複数の異なるメールを含み、他のすべてよりも非常に高い頻度を持つメールがない場合、すべてのデータが匿名化されます。しかし、カラム内の異なる値の数が少ない場合、いくつかを再現することができる場合があります。 このツールがどのように動作するか、そのアルゴリズムを理解し、コマンドラインパラメータを詳細に調整することをお勧めします。
このツールは、少なくとも中程度のデータ量(少なくとも1000行)でのみ正常に機能します。