こちらの続きで今度は列マスク(column mask)を試します。
準備
事前にDS
というグループを作成しておき、ユーザーAのみを追加しておきます。
対象のテーブルはtarget
とします。以下のようにpickup_zip
などの郵便番号が含まれているテーブルです。ちなみにこちらはNYのタクシーの乗降記録です。
Sharedクラスターを作成して起動します。シングルユーザークラスターでは本機能は動作しません。
ユーザーAの作業
USE main.default;
列マスクの関数を定義します。このフィルターは、テーブルにアクセスするユーザーがグループDS
に所属している場合には全レコードをそのまま返却しますが、そうではない場合にはzipコードを****
にマスキングします。
CREATE FUNCTION zip_mask(zip STRING)
RETURN IF(IS_ACCOUNT_GROUP_MEMBER('DS'), zip, '****');
テーブルに列マスクを設定します。
ALTER TABLE target ALTER COLUMN dropoff_zip SET MASK zip_mask;
DESCRIBE EXTENDED
で列マスクが設定されていることを確認できます。
DESCRIBE EXTENDED target;
ユーザーAはグループDS
に所属しているので、列マスクは適用されません。
SELECT * FROM target;
ユーザーBの作業
ユーザーBはグループDS
には属していません。
SELECT * FROM target;
列マスクが動作して、dropoff_zip
が****
にマスキングされます。
より複雑なマスキングのロジックも実装できますので、例えば、メールアドレスの前半のみをマスキングすることも可能です。ぜひご活用ください!