跳至主要内容
版本:v3

自定義遮罩函數

什麼是資料遮罩(Data Masking)?

資料遮罩是為了保護特定敏感或隱私資訊,而將資料遮蔽或置換的處理方式,在降低資料外洩風險的同時又保持可用性。

基礎:在 SQL Explorer 中進行資料遮罩

  1. 進入工作區,於 【Tables】 >【Create a Table】加入您要遮罩的資料。

  2. 前往 【SQL Explorer】 ,於編輯器中輸入 ANSI SQL Query 進行遮罩:
    例如您有一個原始 Table customer_table

    NamePhone
    David Chen25-989-741-2988
    Jennifer Lin23-768-687-3665
    Henry Wu11-719-748-3364
    Amber Lee14-128-190-5944

    以下 Query 將客戶姓名置換為簡稱,並遮蔽電話後四碼為 ****

    SELECT
    substr(split_part(Name,' ',1),1,1)||'. '||substr(split_part(Name,' ',2),1,1)||'.' AS Name_abbr,
    substr(Phone,1,11)||'****'AS Phone_masked
    FROM customer_table
  3. 撰寫進行遮罩 【SQL】 > 點擊 【Run】 ,在 【Result】 >【View(放大鏡)】 會顯示您遮蔽後的結果。

    1_data_masking

    sql_table

  4. 點擊 【Save as(儲存標示)】 ,您可以將遮蔽後的資料儲存為 View 或 Materialized View,以利後續輸出應用。

    2_data_masking

進階:搭配 UDF 功能

如果您的遮罩邏輯較複雜,或是希望所有使用者運用相同的商務邏輯來處理資料,可以使用 Canner Enterprise 的 UDF 功能來協助。

  1. 首先,於 【UDF】頁面中上傳您的自定義遮罩函式
    您上傳的函式需使用 Java 撰寫,以下範例 MaskFunction 函式將置換整個指定的字串欄位為 * 號

    package com.brandboat.udfs.scalar;

    import io.airlift.slice.Slice;
    import io.trino.spi.function.Description;
    import io.trino.spi.function.ScalarFunction;
    import io.trino.spi.function.SqlType;
    import io.trino.spi.type.StandardTypes;

    import static io.airlift.slice.Slices.utf8Slice;

    public class MaskFunction
    {
    private MaskFunction() {}

    @Description("mask value in column")
    @ScalarFunction("mask_column")
    @SqlType(StandardTypes.VARCHAR)
    public static Slice maskColumnSlice(@SqlType(StandardTypes.VARCHAR) Slice value)
    {
    return utf8Slice("*****");
    }
    }

    函式撰寫完成後,您需將 java 檔儲存為 .jar 格式並上傳。

  2. 上傳完成後,點擊進入您要使用的函式檔案,於 【Action】 >【Edit Access Control】 開啟 Enable 並將 【Privilege Type】 設為 Public ,所有工作區都可以使用到此函式。若您只要讓特定幾個工作區可以使用,則請將 【Privilege Type】 設為 Private,並於 【Share to workspace】 選擇要分享指定函式至哪些工作區。

  3. 進入工作區,於 【Tables】 >【Create a Table】加入您要遮罩的資料。

  4. 前往 【SQL Explorer】 ,於編輯器中輸入 ANSI SQL Query,運用已上傳的 UDF 函式進行遮罩:
    例如您有一個原始 Table customer_table

    NamePhone
    David Chen25-989-741-2988
    Jennifer Lin23-768-687-3665
    Henry Wu11-719-748-3364
    Amber Lee14-128-190-5944

    以下 Query 使用MaskFunction 函式 ,將客戶姓名置換為*號,並遮蔽電話後四碼

    SELECT
    mask_column(Name) AS Name_masked,
    substr(Phone,1,11)||'****'AS Phone_masked
    FROM customer_table
  5. 撰寫進行遮罩 【SQL】 > 點擊 【Run】 ,在 【Result】 >【View(放大鏡)】 會顯示您遮蔽後的結果。

    1_data_masking

    udf_table

  6. 點擊 【Save as(儲存標示)】 ,您可以將遮蔽後的資料儲存為 View 或 Materialized View,以利後續輸出應用。

    2_data_masking