マスキングポリシー
このトピックでは、マスキングポリシーとは何か、マスキングポリシーの作成と適用方法、電話番号マスキングのユースケース、マスキングポリシーの管理方法、およびマスキングポリシーを使用する際の制限について説明します。
カラムおよび行レベルのセキュリティの概要については、 カラムおよび行レベルのセキュリティを理解する を参照してください。
各 SQL 操作に必要な権限については、 ポリシーの権限を管理する を参照してください。
定義
カラムレベルのセキュリティを使用すると、テーブルまたはビュー内のカラムにマスキングポリシーを適用し、特定のロールから機密データをマスキングすることができます。
CelerData は、指定した条件に基づいてクエリ実行時にデータをマスキングするために、カラムマスキングポリシーを適用できます。カラムマスキングは、保存されたデータを変更または暗号化しません。クエリ実行時にのみマスキングルールを適用します。また、データ型やカラム名などの基本的なテーブル情報を変更しません。
カラムマスキングポリシーは、テーブルの作成時または作成後にテーブルまたはビューに追加できます。
マスキングポリシーの作成
ポリシーは、カラム名、カラムタイプ、マスキング条件、およびマスキング関数で構成されます。
構文:
CREATE MASKING POLICY [ IF NOT EXISTS ] <name> AS
( <arg_name_to_mask> <arg_type_to_mask> [ , <arg_1> <arg_type_1> ... ] )
RETURNS <arg_type_to_mask> ->
<expression_on_arg_name>
[ COMMENT = '<string_literal>' ]
パラメータ | 必須 | 説明 |
---|---|---|
name | はい | ポリシーの名前で、データベース内で一意である必要があります。ポリシーは、catalog.db.policy の形式でデータベースおよびカタログをまたいで参照できます。カタログが指定されていない場合、現在のカタログが使用されます。 |
arg_name_to_mask | はい | マスキングするカラムの名前です。arg_name_to_mask arg_type_to_mask の最初のペアはマスキングするカラムである必要があります。そのカラムに続くカラムは条件付きカラムです。 |
arg_type_to_mask | はい | マスキングするカラムのデータ型で、RETURNS 句のデータ型と同じである必要があります。 |
arg_1 arg_type_1 | いいえ | 条件付きカラムの名前とデータ型です。ポリシーを作成する際に複数の条件付きカラムを指定できますが、ポリシーを適用する際にそれらのうちのいくつかだけを参照することができます。条件付きカラムは、マスキングするカラムと同じテーブルに存在する必要があります。 |
expression_on_arg_name | はい | マスキング条件として使用される式で、if()、case when()、ifnull() などの任意の条件関数を使用できます。 |
COMMENT | いいえ | ポリシーの説明です。 |
例:
-
例 1:
sales
ロールのみがプレーンテキストの電話番号を表示できるマスキングポリシーを作成します。他のロールはマスクされた電話番号のみを表示できます。CREATE MASKING POLICY phone_mask AS
(phone string) RETURNS string ->
CASE
WHEN current_role() = 'sales' THEN phone
ELSE '***MASKED***'
END
COMMENT "for test"; -
例 2: 条件付きカラム
visibility
を持つマスキングポリシーを作成します。このポリシーは、ACCOUNTADMIN
ロールのみがメールアドレスを表示できるか、visibility
がpublic
のメールアドレスのみをすべてのロールが表示できるようにします。CREATE MASKING POLICY email_visibility AS
(email varchar, visibility varchar) RETURNS varchar ->
CASE
WHEN current_role() = 'ACCOUNTADMIN' THEN email
WHEN visibility = 'public' THEN email
ELSE '***MASKED***'
END; -
例 3: マスキングポリシーでサブクエリを使用します。現在のロールのみが
visibility
がpublic
のメールアドレスを表示できます。CREATE MASKING POLICY email_visibility1 AS
(email varchar) RETURNS varchar ->
CASE
WHEN EXISTS
(SELECT * FROM user3 WHERE visibility = 'public' AND role = current_role()) THEN email
ELSE '***MASKED***'
END;
マスキングポリシーの適用
ポリシーが作成された後、マスキングしたいカラムに適用できます。
構文:
ALTER TABLE <tbl_name> MODIFY COLUMN <col_name>
SET MASKING POLICY <name> [ USING (<col_name>, <cond_col1> , ...)]
例:
-- テーブル sales_info があると仮定します。
CREATE TABLE `sales_info` (
name varchar(50),
phone string,
region varchar(50),
sales int);
-- テーブルの phone カラムにマスキングポリシー phone_mask を適用します。
ALTER TABLE `sales_info` MODIFY COLUMN phone SET MASKING POLICY phone_mask;