Snowflakeで顧客アドレスをマスキングする方法
機密情報を保護しつつ、必要に応じて特定のユーザーだけがデータを閲覧できるようにするため、Snowflakeのダイナミックデータマスキング機能を使って顧客アドレスをマスキングする方法を解説します。この設定により、特定のロールを持たないユーザーにはマスキングされたデータが表示されます。
はじめに
機密情報を保護しつつ、必要に応じて特定のユーザーだけがデータを閲覧できるようにするため、Snowflakeのダイナミックデータマスキング機能を使って顧客アドレスをマスキングする方法を解説します。この設定により、特定のロールを持たないユーザーにはマスキングされたデータが表示されます。
Step 1: マスキングポリシーの作成
まず、顧客アドレス(例えばcustomer_address
列)をマスキングするためのポリシーを作成します。このポリシーでは、ALLOWED_ROLE
というロールを持つユーザーだけが実際のアドレスを閲覧できるように設定します。
CREATE OR REPLACE MASKING POLICY address_mask_policy AS (val STRING) RETURNS STRING ->
CASE
WHEN CURRENT_ROLE() IN ('ALLOWED_ROLE') THEN val
ELSE '********'
END;
上記のクエリでは、ALLOWED_ROLEロールが割り当てられていないユーザーがcustomer_address列をクエリすると、‘********’が表示されます。
Step 2: テーブルとデータの準備
次に、テスト用の顧客データを含むテーブルを作成し、顧客アドレスのデータを挿入します。
CREATE OR REPLACE TABLE customer_data (
customer_id INT,
customer_name STRING,
customer_address STRING
);
INSERT INTO customer_data (customer_id, customer_name, customer_address) VALUES
(1, '田中 太郎', '123 Tokyo St'),
(2, '鈴木 次郎', '456 Osaka Ave'),
(3, '佐藤 花子', '789 Kyoto Rd');
Step 3: マスキングポリシーの適用
作成したaddress_mask_policyをcustomer_address列に適用します。
ALTER TABLE customer_data MODIFY COLUMN customer_address SET MASKING POLICY address_mask_policy;
これで、マスキングポリシーが顧客アドレスに適用され、ALLOWED_ROLE以外のユーザーにはマスクされたアドレスが表示されるようになります。
Step 4: 動作確認
最後に、ロールによるデータ表示の違いを確認します。
1.ALLOWED_ROLE
ロールを持つユーザーがクエリを実行した場合:
SET ROLE ALLOWED_ROLE;
SELECT * FROM customer_data;
結果
| customer_id | customer_name | customer_address |
|-------------|---------------|------------------|
| 1 | 田中 太郎 | 123 Tokyo St |
| 2 | 鈴木 次郎 | 456 Osaka Ave |
| 3 | 佐藤 花子 | 789 Kyoto Rd |
2.他のロールを持つユーザーがクエリを実行した場合:
SET ROLE OTHER_ROLE;
SELECT * FROM customer_data;
結果
| customer_id | customer_name | customer_address |
|-------------|---------------|------------------|
| 1 | 田中 太郎 | ******** |
| 2 | 鈴木 次郎 | ******** |
| 3 | 佐藤 花子 | ******** |
最後に
Snowflakeのダイナミックデータマスキングを使うことで、シンプルな設定で機密情報の保護が可能です。今回の例では、SQLクエリを使ってマスキングポリシーを作成し、指定の列に適用することで、ロールに応じてデータを動的にマスキングする方法を紹介しました。