すべてのプロダクト
Search
ドキュメントセンター

Hologres:データマスキング

最終更新日:Nov 23, 2025

Hologres は、列ごとにデータをマスキングできるデータマスキング機能を提供します。この機能を有効にすると、クエリ結果で機密情報がマスキングされます。これにより、機密データや個人データを保護できます。このトピックでは、データマスキング機能を有効にする方法、およびデータマスキング構成をクエリおよび削除する方法について説明します。

背景情報

ビッグデータの時代において、ビッグデータ、クラウドコンピューティング、人工知能 (AI) などの技術が広く利用されています。これらの技術は、詳細なデータマイニングや分析のための強力なツールを提供し、企業がビッグデータの潜在的な価値を引き出すのに役立ちます。しかし、これらの技術は、機密情報や個人情報の保護に課題をもたらします。

Hologres は、データマスキング機能を提供します。ユーザーと列に対してマスキングルールを設定できます。機密データをクエリすると、結果はマスキングされます。この機能により、効率的にデータを共有、マイニング、分析できます。また、データを共有または使用する際にデータを識別不能にすることで、機密情報や個人情報を保護します。

バージョン比較

Hologres は V3.1 以降でデータマスキングの動作を最適化しました。次の表は、V3.1 以降の機能と以前のバージョンの機能を比較したもので、データマスキングをよりよく理解し、使用するのに役立ちます。

特徴

V3.1 以降

V3.0 以前

TEXT 以外のフィールドのマスキング

INT、FLOAT、ARRAY などのデータ型に対してデフォルトのマスキングがサポートされています。ただし、これらのポリシーはデフォルト値に基づいている場合にのみ有効です。詳細については、「デフォルト値」をご参照ください。

サポートされていません。CAST TEXT を使用してマスキングをバイパスできます。このメソッドは推奨されません。

ビュー

結果はマスキングされます。

結果はマスキングされません。これは推奨されません。

マスキングされたフィールドを含む JOIN フィールドまたは WHERE 条件

結果は空です。

結果はマスキングされません。これは推奨されません。

マスキングされたフィールドのバイナリログの Flink 消費

  • 消費されるテーブルがユーザーに対してマスキングされている場合、すべてのモードでバイナリログの消費が禁止されます。

  • 消費されるテーブルがユーザーに対してマスキングされていない場合、すべてのモードでバイナリログの消費が許可されます。

  • V2.2.38 より前のバージョン、および V3.0.1 から V3.0.19 までのバージョンでは:

    • Fixed FE モードは、マスキングされたフィールドの消費をサポートしていません。

    • FE モードは、マスキングされたフィールドの消費をサポートしています。

  • V3.0.19 から V3.0.27 までのバージョンでは

    Fixed FE と FE の両方のモードでバイナリログの消費が禁止されます。ユーザーは、そのユーザーのすべてのテーブルでデータマスキングがキャンセルされている場合にのみ、バイナリログを消費できます。

    -- このユーザーのマスキングを無効にします。
    ALTER ROLE "<user>" SET hg_anon_enable = OFF;
    -- 単一のデータベースでこのユーザーのマスキングを無効にします。
    ALTER ROLE "<user>" IN DATABASE <database> SET hg_anon_enable = OFF;
  • V3.0.28 以降、データマスキング関連の GUC 構成が有効になっていても、ユーザーのテーブル結果に対してマスキング操作が実行されない場合、Fixed FE および FE モードでバイナリログを消費できます。

MaxCompute を使用したマスキングされたフィールドの直接読み取り

MaxCompute は、Hologres からマスキングされたフィールドを直接読み取ることを禁止されています。

読み取りはサポートされています。これは推奨されません。

準備

データマスキングを使用する前に、スーパーユーザーはデータベースレベルで次のパラメーターを有効にする必要があります。

-- スーパーユーザーとして実行します。
CREATE EXTENSION IF NOT EXISTS hg_anon;  
ALTER DATABASE <current_db> SET hg_anon_enable = on;

上記のコマンドを実行すると、システムは Hologres インスタンスのバージョンに対応するデータマスキング動作を使用します。特定のマスキング動作を選択することもできます。

  • Hologres V3.1 以降のデータマスキング動作に欠陥があり、予期しない動作が発生した場合、次のコマンドを実行して V3.0 以前のデータマスキング動作にロールバックできます。

    CALL hologres.set_hg_anon_version(1);
  • V3.0 以前のインスタンスは、set_hg_anon_version ストアドプロシージャをサポートしていません。データマスキング機能を使用するインスタンスを V3.1 にアップグレードする場合、次のコマンドを実行して V3.1 のデータマスキング機能を有効にできます。そうしないと、システムは以前のバージョンのデータマスキング機能を引き続き使用します。

    CALL hologres.set_hg_anon_version(2);
    説明
    • この文が実行されると、V3.1 以降のデータマスキング動作が有効になります。

    • この文の実行に失敗した場合、エラーログに "Error: not safe to upgrade to hg_anon version 2" と表示されます。これは、機能の有効化に失敗したことを示します。これは、現在のデータベースで TEXT、VARCHAR、または CHAR 以外のデータ型の列にマスキングが構成されているため、V3.1 以降のデータマスキング結果が期待どおりにならないためです。マスキング構成を修正する必要があります。

制限

  • マスキングルールを持つテーブルや列から、マスキングルールを持たないテーブルや列にデータをインポートすることはできません。次のエラーメッセージが報告されます。

    Error: ERROR: The insert table has not set SECURITY LABEL
  • データマスキングルールが構成されているテーブルに対して UNION または DISTINCT クエリを実行することはできません。次のエラーメッセージが報告されます。

    Error: ERROR: UNION is not support on security item
  • データマスキングはクエリのパフォーマンスに影響を与える可能性があります。影響の度合いは、マスキングメソッドとデータ量によって異なります。クエリのパフォーマンスは 10% から 20% 低下する可能性があります。極端なシナリオでは、パフォーマンスが大幅に低下する可能性があります。

  • 外部テーブルにマスキングルールを構成することはできません。

データマスキング

マスキングルールの構成

Hologres では、特定の列またはユーザーに対してデータマスキングルールを構成できます。データマスキングを実行する前に、データマスキング用の GUC パラメーターを有効にする必要があります。詳細については、「準備」をご参照ください。

  • 構文

    • 列のマスキングルールを構成します。

      複数の列のデータをマスキングするには、次の文を複数回実行します。

      SECURITY LABEL FOR hg_anon ON COLUMN <tablename>.<col_name> IS <label_name>/'default_value';
    • ユーザーのマスキングルールを構成します。

       SECURITY LABEL FOR hg_anon ON ROLE <user_name> IS '[<label_name>|all]:[masked|unmasked]';
  • パラメーター

    パラメーター

    説明

    hg_anon

    hg_anon は Hologres にカプセル化された拡張関数です。データマスキング機能を有効にするには、この拡張関数を呼び出す必要があります。

    tablename

    データをマスキングする列を含むテーブルの名前。

    col_name

    データをマスキングする列の名前。

    label_name

    システムで事前定義されたマスキング関数。SHOW hg_anon_labels; を実行して、現在のデータベースに構成されている label_name の値を確認できます。

    user_name

    Alibaba Cloud アカウントの ID。[ユーザー情報] ページで ID を取得できます。

    masked|unmasked

    • masked: データマスキングを使用します。

    • unmasked: データマスキングを使用しません。

    次の表に、事前定義された label_name の値を示します。

    データの型

    label_name

    マスキングポリシー

    マスキングタイプ

    説明

    TEXT

    name

    name

    mask

    名前をマスキングします。

    • マスキング前: Li Hua。マスキング後: *Hua。

    • マスキング前: Wang Xiaoqiang。マスキング後: **qiang。

    email

    email

    mask

    メールアドレスをマスキングします。

    マスキング前: lihuang@alibaba.com。マスキング後: lih***@alibaba.com。

    ip

    ip

    mask

    IP アドレスをマスキングします。

    マスキング前: 1.2.3.4。マスキング後: 1.*.*.*。

    id

    id

    mask

    ID カード番号をマスキングします。

    マスキング前: 110345188812011234。マスキング後: 1****************4。

    phone

    phone

    mask

    電話番号をマスキングします。

    マスキング前: 13900001234。マスキング後: *********34。

    bank_id

    bank_id

    mask

    銀行またはクレジットカード番号をマスキングします。

    マスキング前: 2349867902834701928。マスキング後: ***************1928。

    hash

    md5

    hash

    MD5 アルゴリズムを使用してマスキングします。

    マスキング前: Wenyi West Road, Hangzhou, Zhejiang。マスキング後: dbf894b409d4a2ef17dfd9c7fdcafcd8。

    first_mask

    first_mask

    mask

    最初の文字のみを表示する first_mask ルールを定義します。

    マスキング前: 123456789。マスキング後: 1********。

    INT、FLOAT、およびその他の型

    デフォルト

    default_value

    default_value

    デフォルト値に基づいてデータをマスキングします。

    説明
    • データマスキングを構成する際に label_name が存在しない場合、システムはデフォルト値のマスキングを使用します。

    • この設定は Hologres V3.1 以降でのみサポートされています。

    次のリストは、データ型とデフォルトのマスキング値のマッピングを示しています:

    • TEXT/VARCHAR/CHAR: ***

    • BOOLEAN: false

    • INT8/INT4/INT2: 0

    • TIMESTAMPTZ/TIMESTAMP: 2000-01-01 00:00:00

    • FLOAT8/FLOAT4/DECIMAL/NUMERIC: 0.0

    • MONEY: 0

    • DATE: 2000-01-01

    • TIME/TIMETZ: 現在の時刻

    • UUID: 00000000-0000-0000-0000-000000000000

構成されたマスキングルールの表示

  • 列に構成されているマスキングルールを表示します。

    -- 列に構成されているマスキングルールを表示します。
    SELECT 
    	c.relname
      ,a.attname
      ,provider
      ,label
    FROM pg_seclabel s 
    INNER JOIN pg_catalog.pg_class c ON s.objoid = c.relfilenode 
    INNER JOIN pg_catalog.pg_attribute a ON s.objoid = a.attrelid 
    WHERE a.attnum = objsubid;
  • ユーザーに構成されているマスキングルールを表示します。

    -- ユーザーに構成されているマスキングルールを表示します。
    SELECT
        usename,
        label
    FROM
        pg_shseclabel s
        INNER JOIN pg_catalog.pg_user u ON s.objoid = u.usesysid;

カスタムマスキングルールの変更

構成されたマスキングルールが要件を満たさない場合、hg_anon_lables GUC パラメーターを変更してマスキングルールをカスタマイズできます。

  • 構文

    -- label_name はカスタム名で、method は Hologres の組み込みメソッドを指定します。
    ALTER DATABASE <db_name> SET hg_anon_labels = '[   
    {"label": <label_name1>, "method":<method1>},  
    {"label": <label_name2>, "method":<method2>}, 
    ...  ]'; 

    ALTER DATABASE コマンドを実行した後、新しい設定は現在の接続には適用されません。新しい接続を確立する必要があります。次のコマンドを実行して、新しい設定が有効になったかどうかを確認できます。

    SHOW hg_anon_enable;
  • ALTER DATABASE test_db SET hg_anon_labels = '[
    {"label":"ip", "method":{"desensType":"mask", "type":"ip"}},
    {"label":"email", "method":{"desensType":"mask", "type":"email"}},
    {"label":"name", "method":{"desensType":"mask", "type":"name"}},
    {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}},
    {"label":"hash", "method":{"desensType":"hash", "type":"md5", "salt":""}}]';

    パラメーター:

    マスキング項目

    説明

    データマスキングの例

    {"desensType":"mask", "type":"ip"}

    IP アドレスをマスキングします。

    192.*.*.*

    {"desensType":"mask", "type":"email"}

    メールアドレスをマスキングします。

    abc***@example.net

    {"desensType":"mask", "type":"name"}

    名前をマスキングします。

    *Wu

    {"desensType":"hash", "type":"md5", "salt":""}

    ハッシュマスキング。

    e086aa137fa19f67d27b39d0eca186103228f322c9c98a125554a24f875f0f7e

    {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}}{"label":"last_mask", "method":{"desensType":"mask", "type":"user_define", "before":0, "after":1}}

    カスタムコンテンツマスキング。

    なし

サンプルデータ

データソースを準備します。ビジネスデータを使用することもできます。

-- データベースを作成します。
CREATE DATABASE hg_anon_demo;
-- サンプルデータテーブルを作成します。
DROP TABLE IF EXISTS personal_basic_information;
CREATE TABLE personal_basic_information  
(
    name TEXT
    ,email TEXT
    ,ip TEXT
    ,id TEXT 
    ,phone TEXT
    ,bank_id TEXT);
-- サンプルデータを挿入します。
INSERT INTO personal_basic_information(name,email,ip,id,phone,bank_id) VALUES 
('Zhang San','jiaxi.jx@alibaba-inc.com','127.0.0.1','142732199104050022','18157161223','4514610803067088'),
('Li Si','wb-hy583084@antgroup.com','127.0.0.1','510622198412248000','15757121834','6252470010027800'),
('Li Xiaoyao','wb-hy583084@antgroup.com','172.21.4.234','511025198812271696','18215451832','6252470010027800');

列のマスキングルールを構成する

-- hg_anon 拡張機能を作成します。
CREATE EXTENSION IF NOT EXISTS hg_anon;

-- hg_anon_demo データベースのデータマスキングを有効にします。
ALTER DATABASE hg_anon_demo SET hg_anon_enable = on;

-- 各列にデータマスキングルールを構成します。
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.name IS 'name';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.id IS 'id';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.phone IS 'phone';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.email IS 'email';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.bank_id IS 'bank_id';
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.ip IS 'ip';

新しい接続を確立した後、次のコマンドを実行してマスキング結果を表示します。

SELECT * FROM personal_basic_information;

次の結果が返されます。

name |         email          |      ip      |         id         |    phone    |     bank_id      
------+------------------------+--------------+--------------------+-------------+------------------
 *Si  | wb-***@antgroup.com    | 127.*.*.*    | 5****************0 | *********34 | ************7800
 **yao | wb-***@antgroup.com    | 172.**.*.*** | 5****************6 | *********32 | ************7800
 *San  | jia***@alibaba-inc.com | 127.*.*.*    | 1****************2 | *********23 | ************7088
(3 rows)

列のマスキングをキャンセルする

SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.name IS null;
SECURITY LABEL FOR hg_anon ON COLUMN personal_basic_information.id IS null;

次のコマンドを実行して、列のマスキングをキャンセルした後の結果を表示します。

SELECT name,id FROM personal_basic_information;

次の結果が返されます。

SELECT name,id FROM personal_basic_information;
  name  |         id         
--------+--------------------
 Li Si   | 510622198412248000
 Li Xiaoyao | 511025198812271696
 Zhang San   | 142732199104050022
(3 rows)

ユーザーのマスキングルールをキャンセルする

-- BASIC$test アカウントのすべてのマスキングルールをキャンセルします。
SECURITY LABEL FOR hg_anon ON ROLE "BASIC$test" IS 'all:unmasked';

次のコマンドを実行して、ユーザーのマスキングルールをキャンセルした後の結果を表示します。

SELECT * FROM personal_basic_information;

次の結果が返されます。

  name  |          email           |      ip      |         id         |    phone    |     bank_id      
--------+--------------------------+--------------+--------------------+-------------+------------------
 Li Si   | wb-hy583084@antgroup.com | 127.0.0.1    | 510622198412248000 | 15757121834 | 6252470010027800
 Li Xiaoyao | wb-hy583084@antgroup.com | 172.21.4.234 | 511025198812271696 | 18215451832 | 6252470010027800
 Zhang San   | jiaxi.jx@alibaba-inc.com | 127.0.0.1    | 142732199104050022 | 18157161223 | 4514610803067088
(3 rows)

JOIN 列のマスキングを設定する

-- 次の例は、JOIN 列のマスキングを構成する方法を示しています。
CREATE TABLE tbl1 (
    id text
);
INSERT INTO tbl1
    VALUES ('142732199102290022');

-- personal_basic_information テーブルの id 列はすでにマスキングされています。
SELECT * FROM personal_basic_information a JOIN tbl1 b ON a.id = b.id;

次の結果が返されます。

name | email | ip | id | phone | bank_id | id 
------+-------+----+----+-------+---------+----
(0 rows)

データセキュリティガードを使用してデータをマスキングする

データマスキングルールを手動で構成するか、データセキュリティガードを使用してデータをマスキングできます。

  • 制限

    • Hologres V1.1 以降のみが、データセキュリティガードを使用したデータマスキングをサポートしています。

      説明

      インスタンスが V1.1 より古い場合は、アップグレード準備中の一般的なエラー」をご参照いただくか、フィードバックのために Hologres DingTalk グループに参加してください。詳細については、「より多くのオンラインサポートを受ける方法」をご参照ください。

    • 機密データを識別するために、データセキュリティガードは Alibaba Cloud アカウントのデータマスキングを無効にします。

    • データセキュリティガードは、毎日 09:00:00 にデータをサンプリングします。その後、データセキュリティガードは機密データを識別し、識別された機密データを含む列にデータマスキングルールを構成します。

    • データセキュリティガードを使用して、中国 (北京)、中国 (張家口)、中国 (上海)、中国 (杭州)、中国 (深圳)、中国 (香港)、シンガポール、ドイツ (フランクフルト)、マレーシア (クアラルンプール)、インドネシア (ジャカルタ)、および米国 (シリコンバレー) のリージョンで Hologres のデータをマスキングできます。

  • 手順

    • データマスキング機能を有効にします。

      データマスキングはデフォルトで無効になっています。データベースでこの機能を有効にするには、スーパーユーザーとしてデータベースにログインし、次のコマンドを実行する必要があります。

      -- データマスキング拡張機能をインストールします。
      CREATE EXTENSION IF NOT EXISTS hg_anon;
      -- 指定されたデータベースのデータマスキングを有効にします。デフォルトでは、この機能は無効になっています。
      ALTER DATABASE <db_name> SET hg_anon_enable = on;  

      db_name は、データマスキングを有効にするデータベースの名前を指定します。

      重要
      • hg_anon_enable パラメーターは GUC パラメーターです。ALTER DATABASE コマンドを実行した後、新しい設定は現在の接続には適用されません。

      • 次の SQL 文を実行して、設定が有効になったかどうかを確認できます。

        SHOW hg_anon_enable;
    • マスキングするデータベースを設定します。

      1. データセキュリティガードコンソールにログインします。詳細については、「データセキュリティガードコンソールに移動する」をご参照ください。

      2. 左側のナビゲーションウィンドウで、[ルール設定] > [データ識別ルール] を選択して、[データ識別ルール] ページに移動します。

      3. [機密データ識別] ページで、データ識別ルールを作成します。詳細については、「データ識別ルール」をご参照ください。

      4. 左側のナビゲーションウィンドウで、[データマスキング管理] をクリックして、[データマスキング管理] ページに移動します。

      5. [マスキングシナリオ] ドロップダウンリストから、Hologres 表示マスキング (hologres_display_desense_code) を選択し、[マスキングデータベースの選択] をクリックします。

      6. [アカウントマスキングの承認] ダイアログボックスで、[マスキングされていないデータベース] リストからマスキングするデータベースを選択し、[マスキングされたデータベース] リストに移動します。[このデータベースをマスクすることをデータセキュリティガードに承認します] を選択し、[OK] をクリックします。授权账号脱敏

      7. [データマスキング管理] ページで、右上隅にある [マスキングルールの作成] をクリックします。詳細については、「データマスキング管理」をご参照ください。システムは、指定したデータベースのデータをマスキングします。

よくある質問

例に従ってもデータがマスキングされない

  • 症状: 例の手順を実行してもデータがマスキングされません。

  • 考えられる原因:

    • 特定のユーザーに対してデータマスキングが無効になっています。

    • マスキングラベルが構成されていません。

  • 解決策:

    • 次の SQL コマンドを実行して、特定のユーザーに対してデータマスキングが無効になっているかどうかを確認します。

      SELECT
        usename,
        label
      FROM pg_shseclabel s
      INNER JOIN pg_catalog.pg_user u on s.objoid = u.usesysid;

      デフォルトでは、クエリ結果は空です。これは、データマスキングルールがすべてのユーザーに対して有効になっていることを示します。クエリ結果が空でない場合は、ユーザーに対してデータマスキングを有効にする必要があります。

    • 次の SQL 文を実行して、構成されているマスキングラベルを確認します。

      SHOW hg_anon_labels;

      結果に ip などのラベルが含まれていない場合は、次の SQL コマンドを実行してマスキングラベルを構成します。

      ALTER DATABASE compress_test SET hg_anon_labels = '[
      {"label":"ip", "method":{"desensType":"mask", "type":"ip"}},
      {"label":"email", "method":{"desensType":"mask", "type":"email"}},
      {"label":"name", "method":{"desensType":"mask", "type":"name"}},
      {"label":"id", "method":{"desensType":"mask", "type":"id"}},
      {"label":"phone", "method":{"desensType":"mask", "type":"phone"}},
      {"label":"bank_id", "method":{"desensType":"mask", "type":"bank_id"}},
      {"label":"hash", "method":{"desensType":"hash", "type":"md5", "salt":""}},
      {"label":"first_mask", "method":{"desensType":"mask", "type":"user_define", "before":1, "after":0}}
      ]';

      これらのラベルに対応するルールの詳細については、「事前定義された label_name の値」をご参照ください。