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

MaxCompute:動的データマスキング

最終更新日:Aug 06, 2026

MaxCompute プロジェクトで、特定のユーザーには機密データの表示を許可しつつ、重要な情報を非表示にするには、動的データマスキングを有効にします。この機能は、アクセス時に機密データをリアルタイムで非表示または置換することで、データ漏洩を防ぎます。本トピックでは、MaxCompute で動的データマスキングを有効にする方法と、その使用例について説明します。

はじめに

MaxCompute は、開発、テスト、データ共有、運用などのシナリオで、個人を特定できる情報 (PII) などの機密データを保護するために、動的データマスキングを提供します。列レベルのアクセス制御リスト (ACL) では、ユーザーがアクセスできない列を除外するためにクエリを変更する必要があるのに対し、動的データマスキングは既存のクエリを変更することなく自動的に機能します。ユーザーがデータにアクセスすると、システムはユーザーまたはそのロールに基づいて適切なマスキングポリシーを自動的に適用します。これにより、クエリ、ダウンロード、結合、ユーザー定義関数 (UDF) の計算時にデータがマスクされ、機密データの漏洩リスクが軽減されます。

マスキングポリシーは、マスキング、ハッシュ化、文字置換、数値の丸め、日付の切り捨てなど、さまざまな方法をサポートし、識別番号、銀行カード番号、住所、電話番号などのデータを保護します。MaxCompute は、ストレージからデータを取得する最も早い段階でデータマスキングを適用します。このアプローチにより、高いパフォーマンスとセキュリティが確保されます。

image

注意事項

  • サポートリージョン

    この機能はパブリックプレビュー段階のため、次のリージョンでのみ利用できます:China (Hangzhou)、China (Shanghai)、China (Beijing)、China (Zhangjiakou)、China (Ulanqab)、China (Shenzhen)、China (Chengdu)、China (Hong Kong)、Japan (Tokyo)、Singapore、Malaysia (Kuala Lumpur)、Indonesia (Jakarta)、Germany (Frankfurt)、US (Silicon Valley)、US (Virginia)。

  • サポート対象のドライバーバージョン

    接続方法

    最小バージョン

    マスキングのサポート

    Java SDK

    0.48.0-public 以降

    サポート

    odpscmd

    0.47.1 以降

    サポート

    JDBC

    3.4.3 以降

    サポート

    MaxFrame

    すべてのバージョン

    サポート

    PyODPS

    すべてのバージョン

    サポート

    Go SDK

    すべてのバージョン

    サポート

  • 内部テーブルと外部テーブル

    • マスキングポリシーは、MaxCompute の内部テーブルと外部テーブルの両方でサポートされています。

    • 動的データマスキングと行レベルのアクセス許可は相互に排他的です。マスキングポリシーが既に設定されているテーブルに行レベルのアクセス許可を設定することはできません。逆の場合も同様です。

    • 中国語の文字にマスキングポリシーを適用する場合、文字エンコーディングは UTF-8 にする必要があります。

  • ビュー

    • 標準ビューはマスキングポリシーをサポートします。ビューのポリシーは、ソーステーブルのポリシーと同期されます。ソーステーブルにマスキングポリシーがバインドまたはバインド解除されると、その変更はビューに即座に反映されます。

    • マテリアライズドビューは、作成時にソーステーブルからマスキングポリシーを継承します。その後のソーステーブルのポリシーへの変更は、マテリアライズドビューには反映されません。

  • マスキングポリシー

    ユーザーに複数のマスキングポリシーが適用される場合、優先度が最も高いポリシーが使用されます。詳細については、「ポリシーの優先度」をご参照ください。

仕組み

プロジェクト所有者、または Super_Administrator ロールか Admin ロールを持つユーザーは、マスキングポリシーを管理できます。ユーザーが機密データを含むテーブルにアクセスすると、システムはユーザーまたはそのロールに関連付けられたマスキングポリシーを確認し、その結果に応じてマスクされたデータまたはプレーンテキストデータを返します。

image

マスキング権限

プロジェクトの動の的データマスキング機能を有効化または無効化できるのは、プロジェクト所有者、またはプロジェクトレベルの Super_Administrator ロールや管理者ロールが付与されたユーザーのみです。

テーブルのマスキングポリシーを管理するために必要な権限は次のとおりです。

  • デフォルトでは、プロジェクト所有者、またはプロジェクトレベルの Super_Administrator ロールや管理者ロールを持つユーザーが、必要な権限を持っています。

  • カスタム管理プロジェクトロールを使用して、RAM ユーザーまたは RAM ロールに権限を付与することもできます。MaxCompute コンソールにログインします。左側のナビゲーションペインで、設定管理 > プロジェクト管理 を選択します。プロジェクトの管理ページで、プロジェクト設定 ページに移動し、ロール権限 タブを選択します。プロジェクトレベルロールの作成 をクリックして、MaxCompute 権限を持つプロジェクトロールを作成します。[Role Type][Admin (management role)] に設定し、次の例のようなポリシーステートメントを使用します。

     {
      "Version": "1",
      "Statement": [
        {
          "Effect": "Allow",
          "Action": [
        		"odps:CreateDataMaskingPolicy","odps:ListDataMaskingPolicies"],
          "Resource": [
        "acs:odps:*:projects/[project_name]/authorization/datamaskingpolicies"
          ]
        },
        {
          "Effect": "Allow",
          "Action": [
        		"odps:DropDataMaskingPolicy",
            "odps:DescribeDataMaskingPolicy"
          ],
          "Resource": [
      "acs:odps:*:projects/[project_name]/authorization/datamaskingpolicies/*"
          ]
        },
        {
          "Effect": "Allow",
          "Action": "odps:ApplyDataMaskingPolicy",
          "Resource": [
            "acs:odps:*:projects/[project_name]/authorization/tables/*",
      "acs:odps:*:projects/[project_name]/authorization/datamaskingpolicies/*"
          ]
        }
      ]
    }

コマンド

データマスキングの有効化または無効化

データマスキングスイッチ odps.data.masking.policy.enable は、プロジェクトレベルのプロパティです。このプロパティを設定できるのは、プロジェクト所有者、またはプロジェクトレベルの Super_Administrator または Admin ロールを付与されたユーザーのみです。詳細については、「組み込みロールの管理」をご参照ください。

データマスキングを有効化または無効化した後、キャッシュ更新のレイテンシーにより、変更が反映されるまで約 15 分かかります。

  • プロジェクトの動的データマスキングを有効にします。

    setproject odps.data.masking.policy.enable=true;
  • プロジェクトの動的データマスキングを無効にします。

    setproject odps.data.masking.policy.enable=false;

マスキングポリシーの作成と削除

1 つのプロジェクトに、最大 1,000 個のマスキングポリシーを設定できます。

  • 構文

    • マスキングポリシーを作成します。

      CREATE DATA MASKING POLICY [IF NOT EXISTS] <policy_name> 
      TO { USER <user_list> | ROLE <role_list> | default } 
      USING <Predefined Masking Policy>;
    • マスキングポリシーを削除します。

      DROP DATA MASKING POLICY <policy_name>;
  • パラメーター

    パラメーター

    必須

    説明

    policy_name

    はい

    マスキングポリシーの名前です。ポリシー名はケースインセンシティブで、英字 (a–z、A–Z)、数字 (0–9)、アンダースコア (_) のみで構成できます。名前は英字で始めることを推奨します。名前は最大 128 バイトまで指定できます。

    USER | ROLE | default

    はい

    次のいずれかのオプションを選択します。

    • USER: 特定のユーザーにポリシーを適用します。<user_list> には、ユーザー名を指定します。list users; コマンドを実行してユーザー情報を表示できます。

    • ROLE: 特定のロールにポリシーを適用します。<role_list> には、ロールの名前を指定します。list roles; コマンドを実行してロール情報を表示できます。

    • default:デフォルトでポリシーを適用します。ユーザーまたはロールに一致する他のマスキングポリシーがない場合、デフォルトポリシーが適用されます。

    Predefined Masking Policy

    はい

    事前定義されたマスキングポリシーです。詳細については、「事前定義されたマスキングポリシー」をご参照ください。

    • 例 1:userA、userB、userC に対して MD5 ハッシュポリシーを作成します。

      CREATE data masking policy IF NOT EXISTS masking_test_001
      TO USER (userA, userB, userC)
      USING MASKED_MD5(0);
    • 例 2:プロジェクトの開発ロールと運用ロールに対して MD5 ハッシュポリシーを作成します。

      CREATE data masking policy IF NOT EXISTS masking_test_001
      TO ROLE (role_project_deploy, role_project_dev)
      USING MASKED_MD5(0);

列へのポリシーの適用

  • 構文

    --ポリシーを列にバインドする
    APPLY DATA MASKING POLICY <policy_name> BIND TO TABLE <table_name> COLUMN <column_name>;
    
    --機密データ列から特定のマスキングポリシーをバインド解除する
    APPLY DATA MASKING POLICY <policy_name> UNBIND FROM TABLE <table_name> COLUMN <column_name>;
    
    --機密データ列からすべてのマスキングポリシーをバインド解除する
    APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name> COLUMN <column_name>;
    
    --テーブルのすべての機密データ列からすべてのマスキングポリシーをバインド解除する
    APPLY DATA MASKING POLICY UNBIND ALL FROM TABLE <table_name>;
  • パラメーター

    パラメーター

    必須

    説明

    policy_name

    はい

    マスキングポリシーの名前です。

    table_name

    はい

    機密データを含むテーブルの名前です。

    column_name

    はい

    機密データを含む列の名前です。

マスキングポリシーの表示

  • 構文

    --マスキングポリシーの作成情報を表示する
    DESC DATA MASKING POLICY <policy_name>;
    
    --テーブルの拡張情報 (マスキングポリシーを含む) を表示する
    DESC EXTENDED <table_name>;
    
    --現在のプロジェクト内のすべてのマスキングポリシーの名前を一覧表示する
    LIST DATA MASKING POLICY;
    
    --特定のユーザーにバインドされているマスキングポリシーの名前を一覧表示する
    LIST DATA MASKING POLICY TO USER <user_name>;
    
    --特定のロールにバインドされているマスキングポリシーの名前を一覧表示する
    LIST DATA MASKING POLICY TO ROLE <role_name>;
    
    --特定のテーブルにバインドされているすべてのマスキングポリシーの名前を一覧表示する
    LIST DATA MASKING POLICY ON <table_name>;
    
    --テーブルの特定の列にバインドされているすべてのマスキングポリシーの名前を一覧表示する
    LIST DATA MASKING POLICY ON TABLE <table_name> COLUMN <column_name>;
  • パラメーター

    パラメーター

    必須

    説明

    policy_name

    はい

    マスキングポリシーの名前です。

    table_name

    はい

    機密データを含むテーブルの名前です。

    column_name

    はい

    機密データを含む列の名前です。

    user_name

    はい

    ユーザー名です。

    role_name

    はい

    ロール名です。

プリセットのマスキングポリシー

プリセットのマスキングポリシーには、マスキング、ハッシュ化、文字置換、丸めなどの方法があります。データ型と保護要件に基づいてポリシーを選択してください。

ポリシータイプ

ポリシー名

構文

説明

一般

マスキングなし

UNMASKED

プレーンテキストでデータを返します。

サポートされるデータ型:すべて。

Null 化

MASKED_NULLIFY

データを NULL に置き換えます。

  • サポートされるデータ型:すべて。

  • -- マスキング前 (データ型: STRING)
    +--------------------------+
    | col_string               |
    +--------------------------+
    | アレクサンダー・ブラウン |
    +--------------------------+
    
    -- マスキングポリシー
    MASKED_NULLIFY
    
    -- マスキング後
    +------------+
    | col_string | 
    +------------+
    | NULL       | 
    +------------+

デフォルト値

MASKED_DV

データを対応するデータ型のデフォルト値に置き換えます。詳細については、「MASKED_DV のデフォルト値」をご参照ください。

  • サポートされるデータ型:すべて。

  • -- マスキング前 (データ型: TIMESTAMP)
    +---------------------+
    | col_timestamp       |
    +---------------------+
    | 2024-05-01 11:12:13 |
    +---------------------+
    -- マスキングポリシー
    MASKED_DV
    -- マスキング後 (デフォルトのプロジェクトタイムゾーンは中国標準時、UTC+8)
    +---------------------+
    | col_timestamp       | 
    +---------------------+
    | 1970-01-01 08:00:00 | 
    +---------------------+

日付の切り捨て

MASKED_DATE_YEAR

時刻値の年の部分のみを保持し、月、日、時刻をその年の開始時点 (1 月 1 日 00:00:00 UTC) にリセットします。

  • サポートされるデータ型:DATE、DATETIME、TIMESTAMP_NTZ、TIMESTAMP。

  • -- マスキング前 (データ型: TIMESTAMP)
    +---------------------+
    | col_timestamp       |
    +---------------------+
    | 2024-05-01 11:12:13 |
    +---------------------+
    -- マスキングポリシー
    MASKED_DATE_YEAR
    -- マスキング後 (デフォルトのプロジェクトタイムゾーンは中国標準時、UTC+8)
    +---------------------+
    | col_timestamp       | 
    +---------------------+
    | 2024-01-01 08:00:00 | 
    +---------------------+

丸め

MASKED_POINT_RESERVE(<num>)

数値を指定された小数点以下の桁数 (0 から 5) に丸めます。

  • num:保持する小数点以下の桁数です。値は 0 から 5 の整数である必要があります。

  • サポートされるデータ型:DECIMAL、FLOAT、DOUBLE。

  • -- マスキング前 (データ型: FLOAT)
    +-----------+
    | col_float |
    +-----------+
    | 1.12345   |
    +-----------+
    -- マスキングポリシー: 小数点以下 2 桁を保持
    MASKED_POINT_RESERVE(2)
    -- マスキング後
    +-----------+
    | col_float | 
    +-----------+
    | 1.12      | 
    +-----------+

マスキング

先頭と末尾のマスク

MASKED_STRING_MASKED_BA(<before>, <after>)

文字列の先頭と末尾をアスタリスク (*) でマスクし、中間部分をプレーンテキストで表示します。

  • before: 文字列の先頭は * に置き換えられます。 before パラメーターはマスク長を指定するもので、0 以上の整数でなければなりません。 before が 0 の場合、文字列の先頭はマスクされません。

  • after: 文字列の末尾が * に置き換えられます。 マスクの長さは after パラメーターで指定され、0 以上の整数である必要があります。

  • サポートされるデータ型:STRING、VARCHAR、CHAR、BINARY。

  • -- マスキング前 (データ型: STRING)
    +--------------------------+
    | col_string               |
    +--------------------------+
    | アレクサンダー・ブラウン |
    +--------------------------+
    -- マスキングポリシー: 先頭から 3 文字と末尾から 3 文字をアスタリスクに置き換える
    MASKED_STRING_MASKED_BA(3, 3)
    -- マスキング後
    +--------------------------+
    | col_string               | 
    +--------------------------+
    | ***クサンダー・ブ***     | 
    +--------------------------+

中央のマスク

MASKED_STRING_UNMASKED_BA(<before>, <after>)

文字列の先頭と末尾をプレーンテキストで表示し、中間部分をアスタリスク(*)でマスクします。

  • before:文字列の先頭でプレーンテキストで表示する文字数です。値は 0 以上の整数である必要があります。

  • after:文字列の末尾でプレーンテキストで表示する文字数です。値は 0 以上の整数である必要があります。

  • サポートされるデータ型:STRING、VARCHAR、CHAR、BINARY。

  • -- マスキング前 (データ型: STRING)
    +--------------------------+
    | col_string               |
    +--------------------------+
    | アレクサンダー・ブラウン |
    +--------------------------+
    -- マスキングポリシー: 最初と最後の文字をプレーンテキストで表示
    MASKED_STRING_UNMASKED_BA(1, 1)
    -- マスキング後
    +--------------------------+
    | col_string               | 
    +--------------------------+
    | ア**********ン           | 
    +--------------------------+

ハッシュ化

SHA-256 ハッシュ化

MASKED_SHA256(<salt>)

SHA-256 ハッシュアルゴリズムを使用してデータをマスクします。

  • salt:ソルトです。値は 0 から 9 の整数である必要があります。

  • サポートされるデータ型:STRING、VARCHAR、CHAR、BINARY。

  • -- マスキング前 (データ型: STRING)
    +------------------------+
    | col_string             | 
    +------------------------+
    | 4562-1234-5678-9123    | 
    +------------------------+
    -- マスキングポリシー
    MASKED_SHA256(0)
    -- マスキング後
    +------------------------------------------------+
    | col_string                                     | 
    +------------------------------------------------+
    | zwGMB1aCF1t705EfcwdDorql4MZb46XBqQJw/2RVx8U=    | 
    +------------------------------------------------+

SHA-512 ハッシュ化

MASKED_SHA512(<salt>)

SHA-512 ハッシュアルゴリズムを使用してデータをマスクします。

  • salt:ソルトです。値は 0 から 9 の整数である必要があります。

  • サポートされるデータ型:STRING、VARCHAR、CHAR、BINARY。

  • -- マスキング前 (データ型: STRING)
    +------------------------+
    | col_string             | 
    +------------------------+
    | 4562-1234-5678-9123    | 
    +------------------------+
    -- マスキングポリシー
    MASKED_SHA512(0)
    -- マスキング後
    +------------------------------------------------------------------------------------------+
    | col_string                                                                               | 
    +------------------------------------------------------------------------------------------+
    | 3PPywfEIp08WuTUI8FZCCfdVuRu68wZTVwWWVAf4pboACUnH6w9kFMLpl2AARaGW/mvWvg26p0EIqmE0fAEiuA== | 
    +------------------------------------------------------------------------------------------+

MD5 ハッシュ化

MASKED_MD5(<salt>)

MD5 ハッシュアルゴリズムを使用してデータをマスクします。

  • salt:ソルトです。値は 0 から 9 の整数である必要があります。

  • サポートされるデータ型:STRING、VARCHAR、CHAR、BINARY。

  • -- マスキング前 (データ型: STRING)
    +------------------------+
    | col_string             | 
    +------------------------+
    | 4562-1234-5678-9123    | 
    +------------------------+
    -- マスキングポリシー
    MASKED_MD5(0)
    -- マスキング後
    +--------------------------+
    | col_string               | 
    +--------------------------+
    | mK/o08tew5g7S3XV/BkFfw== | 
    +--------------------------+

SM3 ハッシュ化

MASKED_SM3(<salt>)

SM3 ハッシュアルゴリズムを使用してデータをマスクします。

  • salt:ソルトです。値は 0 から 9 の整数である必要があります。

  • サポートされるデータ型:STRING、VARCHAR、CHAR、BINARY。

  • -- マスキング前 (データ型: STRING)
    +------------------------+
    | col_string             | 
    +------------------------+
    | 4562-1234-5678-9123    | 
    +------------------------+
    -- マスキングポリシー
    MASKED_SM3(0)
    -- マスキング後
    +------------------------------------------------+
    | col_string                                     | 
    +------------------------------------------------+
    | Q2TfwUh4B8QQH8jPL6DfdoGysx/CXBxn2T14dDwQtQw=    | 
    +------------------------------------------------+

文字置換

ランダム置換

MASKED_REPLACE_RANDOM(<position>)

データを数字と文字を含むランダムな文字に置き換えます。文字列の長さは変わりません。

  • position:置換を開始する位置を指定する整数です。

    • position = 0 の場合、文字列全体がランダムな文字に置き換えられます。

    • position > 0 の場合、先頭から position 文字がランダムな文字に置き換えられます。

    • position < 0 の場合、末尾の N 文字が置き換えられます。N は position の絶対値です。

  • サポートされるデータ型:STRING、VARCHAR、CHAR、BINARY。

  • -- マスキング前 (データ型: STRING)
    +--------------------------+
    | col_string               |
    +--------------------------+
    | アレクサンダー・ブラウン |
    +--------------------------+
    -- マスキングポリシー: 先頭から 7 文字をランダムな文字に置き換える
    MASKED_REPLACE_RANDOM(7)
    -- マスキング後
    +--------------------------+
    | col_string               | 
    +--------------------------+
    | 4DlJQxi・ブラウン        | 
    +--------------------------+

先頭と末尾のランダム置換

MASKED_REPLACE_RANDOM_BA(<before>, <after>)

文字列の先頭と末尾を数字と文字を含むランダムな文字に置き換えます。文字列の長さは変わりません。

  • before:文字列の先頭から置き換える文字数です。値は 0 以上の整数である必要があります。値が 0 の場合、先頭は置き換えられません。

  • after:文字列の末尾から置き換える文字数です。値は 0 以上の整数である必要があります。値が 0 の場合、末尾は置き換えられません。

  • サポートされるデータ型:STRING、VARCHAR、CHAR、BINARY。

  • -- マスキング前 (データ型: STRING)
    +--------------------------+
    | col_string               |
    +--------------------------+
    | アレクサンダー・ブラウン |
    +--------------------------+
    -- マスキングポリシー: 先頭から 4 文字と末尾から 4 文字をランダムな文字に置き換える
    MASKED_REPLACE_RANDOM_BA(4,4)
    -- マスキング後
    +--------------------------+
    | col_string               | 
    +--------------------------+
    | r0xEダー・ブWNrA         | 
    +--------------------------+

固定置換

MASKED_REPLACE_FIXED(<position>, <fixed_string>)

  • データを固定文字列に置き換えます。

  • position:置換を開始する位置を指定する整数です。

    • position = 0 の場合、文字列全体が fixed_string に置き換えられます。

    • position > 0 の場合、先頭から position 文字が fixed_string に置き換えられます。

    • position < 0 の場合、末尾の N 文字が fixed_string に置き換えられます。N は position の絶対値です。

  • fixed_string:置換文字列です。最大 100 文字まで指定可能で、スペースを含めることはできません。

  • サポートされるデータ型:STRING、VARCHAR、CHAR、BINARY。

  • -- マスキング前 (データ型: STRING)
    +--------------------------+
    | col_string               |
    +--------------------------+
    | アレクサンダー・ブラウン |
    +--------------------------+
    -- マスキングポリシー: 先頭から 7 文字を固定文字列 "Oli" に置き換える
    MASKED_REPLACE_FIXED(7, "Oli")
    -- マスキング後
    +--------------------------+
    | col_string               | 
    +--------------------------+
    | Oli・ブラウン            | 
    +--------------------------+

機密性の高い個人情報のマスキング

この例では、データマスキングポリシーを設定して機密性の高い個人情報をマスクする方法を示します。

  1. データを準備します。

    個人情報を格納するテーブルを作成し、機密データを挿入します。

    -- 機密情報用のテーブルを作成します。
    CREATE TABLE if NOT EXISTS personal_info (
     id bigint COMMENT 'ユーザーの一意の ID。',
     name string COMMENT 'ユーザーの名前。',
     age int COMMENT 'ユーザーの年齢。',
     gender string COMMENT 'ユーザーの性別。',
     height float COMMENT 'ユーザーの身長。',
     birthday date COMMENT 'ユーザーの生年月日。',
     phone_number string COMMENT 'ユーザーの電話番号。',
     email string COMMENT 'ユーザーのメールアドレス。',
     address string COMMENT 'ユーザーの住所。',
     salary decimal(18, 2) COMMENT 'ユーザーの給与。',
     create_time timestamp COMMENT 'ユーザー情報が作成された時刻。',
     update_time timestamp COMMENT 'ユーザー情報が更新された時刻。',
     is_deleted boolean COMMENT 'ユーザー情報が削除されたかどうかを示します。'
    );
    -- 機密データを挿入します。
    INSERT INTO personal_info VALUES
     (1, '田中 太郎', 18, '男性', 178.56, '1990-01-01', '13800000000', 'taro.tanaka@example.com', '東京都千代田区', 5000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00', false),
     (2, '鈴木 花子', 20, '女性', 162.70, '1992-02-02', '13900000000', 'hanako.suzuki@example.com', '大阪府大阪市中央区', 6000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00',false),
     (3, '佐藤 次郎', 22, '男性', 185.21, '1994-03-03', '14000000000', 'jiro.sato@example.com', '福岡県福岡市博多区', 7000.00, '2023-04-19 11:32:00', '2023-04-19 11:32:00', false);
  2. データマスキングポリシーを設定します。

    • 名前は、先頭の文字のみを残し、残りをアスタリスク (*) で置換します。

      CREATE data masking policy IF NOT EXISTS masking_name
      TO USER (RAM$xxx@test.aliyunid.com:xxx)
      USING MASKED_STRING_UNMASKED_BA(1, 0);
      
      apply data masking policy masking_name bind TO
      TABLE personal_info COLUMN name;
    • 身長の値を最も近い整数に丸めます。

      CREATE data masking policy IF NOT EXISTS masking_height
      TO USER (RAM$xxx@test.aliyunid.com:xxx)
      USING MASKED_POINT_RESERVE(0);
      
      apply data masking policy masking_height bind TO
      TABLE personal_info COLUMN height;
    • 生年月日については、年を保持し、月と日を 01-01 にリセットします。

      CREATE data masking policy IF NOT EXISTS masking_birthday
      TO USER (RAM$xxx@test.aliyunid.com:xxx)
      USING MASKED_DATE_YEAR;
      
      apply data masking policy masking_birthday bind TO
      TABLE personal_info COLUMN birthday;
    • デフォルトユーザーについては、電話番号を SM3 アルゴリズムを使用してハッシュ化します。

      CREATE DATA MASKING POLICY default_sm3
      TO DEFAULT
      USING MASKED_SM3(0);
      
      apply data masking policy default_sm3 bind TO
      TABLE personal_info COLUMN phone_number;
  3. データマスキングポリシーが適用されているアカウントを使用してデータをクエリします。

    SELECT id, name, height, birthday, phone_number FROM personal_info;
    
    -- マスキング前
    +------------+-----------+--------+------------+--------------+
    | id         | name      | height | birthday   | phone_number |
    +------------+-----------+--------+------------+--------------+
    | 1          | 田中 太郎   | 178.56 | 1990-01-01 | 13800000000  |
    | 2          | 鈴木 花子   | 162.7  | 1992-02-02 | 13900000000  |
    | 3          | 佐藤 次郎   | 185.21 | 1994-03-03 | 14000000000  |
    +------------+-----------+--------+------------+--------------+
    
    -- マスキング後
    +------------+------------+------------+------------+------------------------------------------------+
    | id         | name       | height     | birthday   | phone_number                                   | 
    +------------+------------+------------+------------+------------------------------------------------+
    | 1          | 田****       | 179.0      | 1990-01-01 | lvYJaH4ElL2ilpQx/8tfMUw7xP22yblIgmfWp0/msUQ=    | 
    | 2          | 鈴****       | 163.0      | 1992-01-01 | 9fFWacNSwCRZLAjMHqunlfwkqhTbP2ubuDOeOSh4N1c=    | 
    | 3          | 佐****       | 185.0      | 1994-01-01 | k/0JoQCSarJg9ATJ5tyVnhQf1jIBxHXRbB+cvUm4OmE=    | 
    +------------+------------+------------+------------+------------------------------------------------+

デフォルトのマスキング

この例では、ユーザーまたはロールが複数のデータマスキングポリシーに一致する場合にポリシー優先度がどのように機能するかを示します。

デフォルトユーザーに MASKED_SHA256(5) ポリシーを適用します。

CREATE DATA MASKING POLICY default_hash_policy
TO DEFAULT
USING MASKED_SHA256(5);

特定のユーザー A と B に UNMASKED ポリシーを適用します。

CREATE DATA MASKING POLICY ab_unmask_policy
TO USER (A, B)
USING UNMASKED;

結果:ユーザー A と B はプレーンテキストデータにアクセスできます。他のユーザーは SHA-256 でハッシュ化されたデータにのみアクセスできます。

説明

ユーザー A と B は MASKED_SHA256(5) と UNMASKED の両方のポリシーに一致します。システムは、優先度がより高い UNMASKED を適用します。詳細については、「ポリシー優先度」をご参照ください。他のユーザーは MASKED_SHA256(5) ポリシーにのみ一致します。

付録

ポリシーの優先度

ユーザーに複数のマスキングポリシーが適用される場合、優先度が最も高いポリシーが使用されます。

例えば、ユーザーA が col_string 列にアクセスする際、優先度レベル 3 の MASKED_REPLACE_RANDOM(3) と優先度レベル 4 の MASKED_SM3 という 2 つのマスキングポリシーに一致したとします。数値が小さいほど優先度が高いため、MASKED_REPLACE_RANDOM(3) ポリシーが適用されます。ユーザーA は、ランダムな文字でマスクされたデータを閲覧します。

優先度

マスキングポリシー

0 (最高)

UNMASKED

1

MASKED_POINT_RESERVE(num)

2

MASKED_DATE_YEAR

3

MASKED_STRING_MASKED_BA(before, after)

MASKED_STRING_UNMASKED_BA(before, after)

MASKED_REPLACE_RANDOM(position)

MASKED_REPLACE_RANDOM_BA(before, after)

MASKED_REPLACE_FIXED(position, fixed_string)

4

MASKED_SHA256

MASKED_SHA512

MASKED_MD5

MASKED_SM3

5

MASKED_DV

6 (最低)

MASKED_NULLIFY

MASKED_DV のデフォルト値

デフォルト値

BIGINT

0

DOUBLE

0.0

DECIMAL

0

STRING

"" (空の文字列)

DATETIME

DATETIME '1970-01-01 00:00:00' (UTC)

BOOLEAN

false

TINYINT

0

SMALLINT

0

INT

0

BINARY

'' (空のバイナリ文字列)

FLOAT

0.0

DOUBLE

0.0

DECIMAL

0

VARCHAR(n)

"" (空の文字列)

CHAR(n)

n 個のスペース

DATE

DATE '1970-01-01'

TIMESTAMP

TIMESTAMP '1970-01-01 00:00:00' (UTC)

TIMESTAMP_NTZ

TIMESTAMP '1970-01-01 00:00:00'

ARRAY

空の配列

MAP

空のマップ

JSON

"" (空の文字列)

STRUCT

(フィールド型のデフォルト値)