データマスキングは、クレジットカード番号、社会保障番号 (SSN)、住所などの機微データを守るために広く使われるアプローチです。マスキングは自社や顧客のデータを守るだけにとどまらず、法律で求められる場合もあります — もっとも有名な例は GDPR です。
データマスキングには置換、シャッフル、編集 (redaction) など多様な手法があり、目的も異なります。機微データをマスクすれば、データ漏洩や不正アクセスの可能性を減らしながら、開発、テスト、分析のような現実的なデータを必要とする作業を続けられます。
PostgreSQL Anonymizer

PostgreSQL Anonymizer はコミュニティ製の拡張で、さまざまなマスキング選択肢と方式を PostgreSQL に追加します。
マスキング設定は PostgreSQL Security Label に格納されます。
動的マスキング
動的マスキングは、ロールを "MASKED" として宣言し、マスキングルールも併せて宣言する形で機能します。"MASKED" ロールを付与されたユーザーは元データにアクセスできなくなり、他のロールは引き続きアクセスできます。多様なマスキング関数が用意されており、独自ルールも書けます。

この方式にはいくつかの制限があります。たとえばドキュメントに書かれているとおり、DBeaver や pgAdmin のような GUI を使うと問題が生じることがあり、特定のクエリでは動的マスキングが非常に遅くなり得ます。さらに、マスキングのバリエーションごとに異なるビューが必要で、ロールが変わるたび、また下層テーブルやバリエーションが増えるたびに管理が手に負えなくなります。
静的マスキング
PostgreSQL Anonymizer は静的マスキングもサポートし、元データセットを直接変換します。元データを偽データに置き換える、ノイズを加える、シャッフルするなどで機微データを隠せます。
ただしこの方式は元データを破壊し、遅いプロセスです。使う前によく考えてください。静的マスキングの原理は、マスク対象カラムを少なくとも 1 つ含むテーブルの全行を更新することです。事実上 PostgreSQL がディスク上の全データを書き換えます。
Bytebase Dynamic Data Masking

Bytebase Dynamic Data Masking は PostgreSQL のビューやユーザーに依存しません。マスキングポリシーと付与を Bytebase 内部で管理し、ユーザーが SQL Editor からクエリしたタイミングで適用します。

Bytebase Dynamic Data Masking は次のコンポーネントで構成されます。
- グローバルマスキングルール:
Workspace AdminとDBAが一括でマスキングレベルを適用できる。例えば「email」と命名されたすべてのカラムを「Partial」マスキングに。数千のカラムにマスキングポリシーを再適用したり、ビューを保守し続けたりせずに、ポリシーを簡単に変更できます。

- カラム単位マスキングルール:
Workspace AdminとDBAがテーブルカラムを別のマスキングレベルに設定できる。カラム単位ルールはグローバルルールに優先する。

- アンマスクデータへのアクセス: マスクされたコンテンツに対して、
Workspace AdminとDBAは特定ユーザーにアンマスクされたデータへのアクセスを付与できる。

Workspace Admin と DBA は Bytebase のロールです。
比較表
| PostgreSQL Anonymizer | Bytebase Dynamic Data Masking | |
|---|---|---|
| 互換性 | postgresql_anonymizer 拡張が必要 | すべての PostgreSQL ディストリビューション ⭐️ |
| 適用場所 | データベース自身 ⭐️ | Bytebase SQL Editor |
| 機能 | 基本 | 細粒度のマスキングポリシーとアクセス付与を備える高度な機能 ⭐️ |
| 価格 | 無料 ⭐️ | 有償 |
PostgreSQL Anonymizer の利点は、データベース自体に直接実装される点です。したがってクエリの送信経路に関係なくマスキングルールが強制されます。Bytebase Dynamic Data Masking は、クエリが SQL Editor を通る必要があります。
Bytebase Dynamic Data Masking の利点は、すべての PostgreSQL ディストリビューションとの互換性、機能豊富なマスキングポリシーとアクセス付与です。チームが Bytebase の SQL Editor を経由して DB へクエリすることを徹底できれば (管理の観点でもそれが望ましい)、Bytebase Dynamic Data Masking は最適な選択です。
このチュートリアルで Bytebase Dynamic Data Masking を試せます。問題に遭遇したり、助けが必要なら、Discord チャンネルへどうぞ。