文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
Man Pages (TGZ) - 258.5Kb
Man Pages (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  MySQL Enterprise 資料遮罩與去識別化元件函式說明

8.5.2.4 MySQL Enterprise 資料遮罩與去識別化元件函式說明

MySQL Enterprise 資料遮罩與去識別化元件包含數個函式,這些函式可以歸納為下列類別

資料遮罩元件函式

本節中的每個元件函式都會對其字串引數執行遮罩作業,並傳回遮罩後的結果。

  • mask_canada_sin(str [, mask_char])

    遮罩加拿大社會保險號碼 (SIN),並傳回所有有意義的數字都以 'X' 字元取代的號碼。可以指定選用的遮罩字元。

    引數

    • str:要遮罩的字串。接受的格式為

      • 九個未分隔的數字。

      • 九個數字以模式分組:xxx-xxx-xxx(「-」是任何分隔字元)。

      此引數會轉換為 utf8mb4 字元集。

    • mask_char:(選用)用於遮罩的單一字元。如果未給定 mask_char,則預設為 'X'

    傳回值

    遮罩後的加拿大 SIN,為以 utf8mb4 字元集編碼的字串,如果引數長度不正確則傳回錯誤,如果 str 格式不正確或包含多位元組字元則傳回 NULL

    範例

    mysql> SELECT mask_canada_sin('046-454-286'), mask_canada_sin('abcdefijk');
    +--------------------------------+------------------------------+
    | mask_canada_sin('046-454-286') | mask_canada_sin('abcdefijk') |
    +--------------------------------+------------------------------+
    | XXX-XXX-XXX                    | XXXXXXXXX                    |
    +--------------------------------+------------------------------+
    mysql> SELECT mask_canada_sin('909');
    ERROR 1123 (HY000): Can't initialize function 'mask_canada_sin'; Argument 0 is too short.
    mysql> SELECT mask_canada_sin('046-454-286-909');
    ERROR 1123 (HY000): Can't initialize function 'mask_canada_sin'; Argument 0 is too long.
  • mask_iban(str [, mask_char])

    遮蔽國際銀行帳戶號碼 (IBAN),並傳回除了前兩個字母(表示國家/地區)之外的所有字元都以 '*' 字元取代的號碼。可以指定選用的遮蔽字元。

    引數

    • str:要遮蔽的字串。每個國家/地區可以有不同的國家路由或帳戶編號系統,最少 13 個字元,最多 34 個字母數字 ASCII 字元。接受的格式如下:

      • 未分隔的字元。

      • 字元以四個為一組,最後一組除外,並以空格或任何其他分隔符號分隔(例如:xxxx-xxxx-xxxx-xx)。

      此引數會轉換為 utf8mb4 字元集。

    • mask_char:(選用)用於遮蔽的單一字元。如果未提供 mask_char,則預設值為 '*'

    傳回值

    遮蔽後的國際銀行帳戶號碼,以 utf8mb4 字元集編碼的字串形式傳回;如果引數長度不正確,則傳回錯誤;如果 str 的格式不正確或包含多位元組字元,則傳回 NULL

    範例

    mysql> SELECT mask_iban('IE12 BOFI 9000 0112 3456 78'), mask_iban('abcdefghijk');
    +------------------------------------------+--------------------------+
    | mask_iban('IE12 BOFI 9000 0112 3456 78') | mask_iban('abcdefghijk') |
    +------------------------------------------+--------------------------+
    | IE** **** **** **** **** **              | ab*********              |
    +------------------------------------------+--------------------------+
    mysql> SELECT mask_iban('909');
    ERROR 1123 (HY000): Can't initialize function 'mask_iban'; Argument 0 is too short.
    mysql> SELECT mask_iban('IE12 BOFI 9000 0112 3456 78 IE12 BOFI 9000 0112 3456 78');
    ERROR 1123 (HY000): Can't initialize function 'mask_iban'; Argument 0 is too long.
  • mask_inner(str, margin1, margin2 [, mask_char])

    遮蔽字串的內部部分,保持兩端不變,並傳回結果。可以指定選用的遮蔽字元。

    mask_inner 支援所有字元集。

    引數

    • str:要遮蔽的字串。此引數會轉換為 utf8mb4 字元集。

    • margin1:一個非負整數,指定字串左端保持不遮蔽的字元數。如果值為 0,則左端不會有字元保持不遮蔽。

    • margin2:一個非負整數,指定字串右端保持不遮蔽的字元數。如果值為 0,則右端不會有字元保持不遮蔽。

    • mask_char:(選用)用於遮罩的單一字元。如果未給定 mask_char,則預設為 'X'

    傳回值

    遮蔽後的字串,以與 str 相同的字元集編碼傳回;如果任一邊界為負數,則傳回錯誤。

    如果邊界值的總和大於引數長度,則不會進行遮蔽,並傳回未變更的引數。

    注意

    此函數經過最佳化,在處理單一位元組字串(具有相等的位元組長度和字元長度)時速度更快。例如,utf8mb4 字元集對於 ASCII 字元僅使用一個位元組,因此此函數將僅包含 ASCII 字元的字串作為單一位元組字元字串處理。

    範例

    mysql> SELECT mask_inner('abcdef', 1, 2), mask_inner('abcdef',0, 5);
    +----------------------------+---------------------------+
    | mask_inner('abcdef', 1, 2) | mask_inner('abcdef',0, 5) |
    +----------------------------+---------------------------+
    | aXXXef                     | Xbcdef                    |
    +----------------------------+---------------------------+
    mysql> SELECT mask_inner('abcdef', 1, 2, '*'), mask_inner('abcdef',0, 5, '#');
    +---------------------------------+--------------------------------+
    | mask_inner('abcdef', 1, 2, '*') | mask_inner('abcdef',0, 5, '#') |
    +---------------------------------+--------------------------------+
    | a***ef                          | #bcdef                         |
    +---------------------------------+--------------------------------+
  • mask_outer(str, margin1, margin2 [, mask_char])

    遮蔽字串的左端和右端,保持內部不遮蔽,並傳回結果。可以指定選用的遮蔽字元。

    mask_outer 支援所有字元集。

    引數

    • str:要遮蔽的字串。此引數會轉換為 utf8mb4 字元集。

    • margin1:一個非負整數,指定字串左端要遮蔽的字元數。如果值為 0,則左端不會有字元被遮蔽。

    • margin2:一個非負整數,指定字串右端要遮蔽的字元數。如果值為 0,則右端不會有字元被遮蔽。

    • mask_char:(選用)用於遮罩的單一字元。如果未給定 mask_char,則預設為 'X'

    傳回值

    遮蔽後的字串,以與 str 相同的字元集編碼傳回;如果任一邊界為負數,則傳回錯誤。

    如果邊界值的總和超過引數長度,則會遮蔽整個引數。

    注意

    此函數經過最佳化,在處理單一位元組字串(具有相等的位元組長度和字元長度)時速度更快。例如,utf8mb4 字元集對於 ASCII 字元僅使用一個位元組,因此此函數將僅包含 ASCII 字元的字串作為單一位元組字元字串處理。

    範例

    mysql> SELECT mask_outer('abcdef', 1, 2), mask_outer('abcdef',0, 5);
    +----------------------------+---------------------------+
    | mask_outer('abcdef', 1, 2) | mask_outer('abcdef',0, 5) |
    +----------------------------+---------------------------+
    | XbcdXX                     | aXXXXX                    |
    +----------------------------+---------------------------+
    mysql> SELECT mask_outer('abcdef', 1, 2, '*'), mask_outer('abcdef',0, 5, '#');
    +---------------------------------+--------------------------------+
    | mask_outer('abcdef', 1, 2, '*') | mask_outer('abcdef',0, 5, '#') |
    +---------------------------------+--------------------------------+
    | *bcd**                          | a#####                         |
    +---------------------------------+--------------------------------+
  • mask_pan(str [, mask_char])

    遮蔽支付卡的主要帳戶號碼 (PAN),並傳回除了最後四位數字之外的所有字元都以 'X' 字元取代的號碼。可以指定選用的遮蔽字元。

    引數

    • str:要遮蔽的字串。字串必須至少包含 14 個,最多 19 個字母數字字元。此引數會轉換為 utf8mb4 字元集。

    • mask_char:(選用)用於遮罩的單一字元。如果未給定 mask_char,則預設為 'X'

    傳回值

    遮蔽後的支付號碼,以 utf8mb4 字元集編碼的字串形式傳回;如果引數長度不正確,則傳回錯誤;如果 str 的格式不正確或包含多位元組字元,則傳回 NULL

    範例

    mysql> SELECT mask_pan(gen_rnd_pan());
    +-------------------------+
    | mask_pan(gen_rnd_pan()) |
    +-------------------------+
    | XXXXXXXXXXXX9102        |
    +-------------------------+
    mysql> SELECT mask_pan(gen_rnd_pan(19));
    +---------------------------+
    | mask_pan(gen_rnd_pan(19)) |
    +---------------------------+
    | XXXXXXXXXXXXXXX8268       |
    +---------------------------+
    mysql> SELECT mask_pan('a*Z');
    ERROR 1123 (HY000): Can't initialize function 'mask_pan'; Argument 0 is too short.
  • mask_pan_relaxed(str)

    遮蔽支付卡的主要帳戶號碼,並傳回除了前六位和最後四位數字之外的所有字元都以 'X' 字元取代的號碼。前六位數字表示支付卡發卡機構。可以指定選用的遮蔽字元。

    引數

    • str:要遮蔽的字串。字串的長度必須適合主要帳戶號碼,但不會進行其他檢查。此引數會轉換為 utf8mb4 字元集。

    • mask_char:(選用)用於遮罩的單一字元。如果未給定 mask_char,則預設為 'X'

    傳回值

    遮蔽後的支付號碼,以 utf8mb4 字元集編碼的字串形式傳回;如果引數長度不正確,則傳回錯誤;如果 str 的格式不正確或包含多位元組字元,則傳回 NULL

    範例

    mysql> SELECT mask_pan_relaxed(gen_rnd_pan());
    +---------------------------------+
    | mask_pan_relaxed(gen_rnd_pan()) |
    +---------------------------------+
    | 551279XXXXXX3108                |
    +---------------------------------+
    mysql> SELECT mask_pan_relaxed(gen_rnd_pan(19));
    +-----------------------------------+
    | mask_pan_relaxed(gen_rnd_pan(19)) |
    +-----------------------------------+
    | 462634XXXXXXXXX6739               |
    +-----------------------------------+
    mysql> SELECT mask_pan_relaxed('a*Z');
    ERROR 1123 (HY000): Can't initialize function 'mask_pan_relaxed'; Argument 0 is too short.
  • mask_ssn(str [, mask_char])

    遮蔽美國社會安全號碼 (SSN),並傳回除了最後四位數字之外的所有字元都以 '*' 字元取代的號碼。可以指定選用的遮蔽字元。

    引數

    • str:要遮罩的字串。接受的格式為

      • 九個未分隔的數字。

      • 九位數字,以模式分組:xxx-xx-xxxx(「-」為任何分隔符號)。

      此引數會轉換為 utf8mb4 字元集。

    • mask_char:(選用)用於遮蔽的單一字元。如果未提供 mask_char,則預設值為 '*'

    傳回值

    遮蔽後的社會安全號碼,以 utf8mb4 字元集編碼的字串形式傳回;如果引數長度不正確,則傳回錯誤;如果 str 的格式不正確或包含多位元組字元,則傳回 NULL

    範例

    mysql> SELECT mask_ssn('909-63-6922'), mask_ssn('cdefghijk');
    +-------------------------+-------------------------+
    | mask_ssn('909-63-6922') | mask_ssn('cdefghijk')   |
    +-------------------------+-------------------------+
    | ***-**-6922             | *******hijk             |
    +-------------------------+-------------------------+
    mysql> SELECT mask_ssn('909');
    ERROR 1123 (HY000): Can't initialize function 'mask_ssn'; Argument 0 is too short.
    mysql> SELECT mask_ssn('123456789123456789');
    ERROR 1123 (HY000): Can't initialize function 'mask_ssn'; Argument 0 is too long.
  • mask_uk_nin(str [, mask_char])

    遮蔽英國國民保險號碼 (UK NIN),並傳回除了前兩位數字之外的所有字元都以 '*' 字元取代的號碼。可以指定選用的遮蔽字元。

    引數

    • str:要遮罩的字串。接受的格式為

      • 九個未分隔的數字。

      • 九位數字,以模式分組:xxx-xx-xxxx(「-」為任何分隔符號)。

      • 九位數字,以模式分組:xx-xxxxxx-x(「-」為任何分隔符號)。

      此引數會轉換為 utf8mb4 字元集。

    • mask_char:(選用)用於遮蔽的單一字元。如果未提供 mask_char,則預設值為 '*'

    傳回值

    遮蔽後的英國 NIN,以 utf8mb4 字元集編碼的字串形式傳回;如果引數長度不正確,則傳回錯誤;如果 str 的格式不正確或包含多位元組字元,則傳回 NULL

    範例

    mysql> SELECT mask_uk_nin('QQ 12 34 56 C'), mask_uk_nin('abcdefghi');
    +------------------------------+--------------------------+
    | mask_uk_nin('QQ 12 34 56 C') | mask_uk_nin('abcdefghi') |
    +------------------------------+--------------------------+
    | QQ ** ** ** *                | ab*******                |
    +------------------------------+--------------------------+
    mysql> SELECT mask_uk_nin('909');
    ERROR 1123 (HY000): Can't initialize function 'mask_uk_nin'; Argument 0 is too short.
    mysql> SELECT mask_uk_nin('abcdefghijk');
    ERROR 1123 (HY000): Can't initialize function 'mask_uk_nin'; Argument 0 is too long.
  • mask_uuid(str [, mask_char])

    遮蔽通用唯一識別碼 (UUID),並傳回所有有意義的字元都以 '*' 字元取代的號碼。可以指定選用的遮蔽字元。

    引數

    • str:要遮蔽的字串。接受的格式為 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中「X」為任何數字,「-」為任何分隔符號。此引數會轉換為 utf8mb4 字元集。

    • mask_char:(選用)用於遮蔽的單一字元。如果未提供 mask_char,則預設值為 '*'

    傳回值

    遮蔽後的 UUID,以 utf8mb4 字元集編碼的字串形式傳回;如果引數長度不正確,則傳回錯誤;如果 str 的格式不正確或包含多位元組字元,則傳回 NULL

    範例

    mysql> SELECT mask_uuid(gen_rnd_uuid());
    +--------------------------------------+
    | mask_uuid(gen_rnd_uuid())            |
    +--------------------------------------+
    | ********-****-****-****-************ |
    +--------------------------------------+
    mysql> SELECT mask_uuid('909');
    ERROR 1123 (HY000): Can't initialize function 'mask_uuid'; Argument 0 is too short.
    mysql> SELECT mask_uuid('123e4567-e89b-12d3-a456-426614174000-123e4567-e89b-12d3');
    ERROR 1123 (HY000): Can't initialize function 'mask_uuid'; Argument 0 is too long.
隨機資料產生元件函數

本節中的元件函數會產生不同資料類型的隨機值。如果可能,產生的值會具有保留給示範或測試值的特徵,以避免將其誤認為合法資料。例如,gen_rnd_us_phone() 會傳回使用 555 區碼的美國電話號碼,該區碼並未分配給實際使用的電話號碼。個別函數說明會描述此原則的任何例外情況。

  • gen_range(lower, upper)

    產生從指定範圍中選擇的隨機數字。

    引數

    • lower:一個整數,指定範圍的下限。

    • upper:一個整數,指定範圍的上限,不得小於下限。

    傳回值

    範圍從 lowerupper (包含),以 utf8mb4 字元集編碼的隨機整數;如果 upper 引數小於 lower,則傳回 NULL

    注意

    為了獲得更好的隨機值品質,請使用 RAND() 而非此函數。

    範例

    mysql> SELECT gen_range(100, 200), gen_range(-1000, -800);
    +---------------------+------------------------+
    | gen_range(100, 200) | gen_range(-1000, -800) |
    +---------------------+------------------------+
    |                 177 |                   -917 |
    +---------------------+------------------------+
    mysql> SELECT gen_range(1, 0);
    +-----------------+
    | gen_range(1, 0) |
    +-----------------+
    |            NULL |
    +-----------------+
  • gen_rnd_canada_sin()

    產生 AAA-BBB-CCC 格式的隨機加拿大社會保險號碼 (SIN)。產生的號碼會通過 Luhn 檢查演算法,以確保此號碼的一致性。

    警告

    gen_rnd_canada_sin() 傳回的值僅應出於測試目的而使用,不適合發佈。無法保證給定的傳回值未分配給合法的加拿大 SIN。如果需要發佈 gen_rnd_canada_sin() 結果,請考慮使用 mask_canada_sin() 來遮蔽它。

    引數

    無。

    傳回值

    utf8mb4 字元集編碼的隨機加拿大 SIN 字串。

    範例

    mysql> SELECT gen_rnd_canada_sin();
    +----------------------+
    | gen_rnd_canada_sin() |
    +----------------------+
    | 046-454-286          |
    +----------------------+
  • gen_rnd_email(name_size, surname_size, domain)

    產生 random_name.random_surname@domain 形式的隨機電子郵件地址。

    引數

    • name_size:(選用)一個整數,指定地址名稱部分的字元數。如果未提供 name_size,則預設值為五。

    • surname_size:(選用)一個整數,指定地址姓氏部分的字元數。如果未提供 surname_size,則預設值為七。

    • domain:(選用)一個字串,指定地址的網域部分。如果未提供 domain,則預設值為 example.com

    傳回值

    utf8mb4 字元集編碼的隨機電子郵件地址字串。

    範例

    mysql> SELECT gen_rnd_email(name_size = 4, surname_size = 5, domain = 'mynet.com');
    +----------------------------------------------------------------------+
    | gen_rnd_email(name_size = 4, surname_size = 5, domain = 'mynet.com') |
    +----------------------------------------------------------------------+
    | lsoy.qwupp@mynet.com                                                 |
    +----------------------------------------------------------------------+
    mysql> SELECT gen_rnd_email();
    +---------------------------+
    | gen_rnd_email()           |
    +---------------------------+
    | ijocv.mwvhhuf@example.com |
    +---------------------------+
  • gen_rnd_iban([country, size])

    產生一個隨機的國際銀行帳戶號碼 (IBAN),格式為 AAAA BBBB CCCC DDDD。產生的字串以兩個字元的國家代碼開始,接著是根據 IBAN 規範計算的兩個檢查碼,以及隨機的字母數字字元,直到達到所需的長度。

    警告

    gen_rnd_iban() 返回的值僅應用於測試目的,如果與有效的國家代碼一起使用,則不適合發布。無法保證給定的返回值不會被分配給合法的銀行帳戶。如果必須發布 gen_rnd_iban() 的結果,請考慮使用 mask_iban() 將其遮罩。

    引數

    • country:(選填)兩個字元的國家代碼;預設值為 ZZ

    • size:(選填)有意義的字元數量;預設值為 16,最小值為 15,最大值為 34

    傳回值

    一個隨機的 IBAN,以 utf8mb4 字元集編碼的字串形式表示。

    範例

    mysql> SELECT gen_rnd_iban();
    +-----------------------------+
    | gen_rnd_iban()              |
    +-----------------------------+
    | ZZ79 3K2J WNH9 1V0DI        |
    +-----------------------------+
  • gen_rnd_pan([size])

    產生一個隨機的支付卡主要帳號號碼 (PAN)。該號碼通過 Luhn 檢查(一種針對檢查碼執行校驗和驗證的演算法)。

    警告

    gen_rnd_pan() 返回的值僅應用於測試目的,不適合發布。無法保證給定的返回值不會被分配給合法的支付帳戶。如果必須發布 gen_rnd_pan() 的結果,請考慮使用 mask_pan()mask_pan_relaxed() 將其遮罩。

    引數

    • size:(選填)一個整數,指定結果的大小。如果未提供 size,則預設值為 16。如果提供,size 必須是介於 12 到 19 之間的整數。

    傳回值

    一個隨機的支付號碼,以字串形式表示;如果給定的 size 引數超出允許範圍,則返回錯誤。

    範例

    mysql> SELECT mask_pan(gen_rnd_pan());
    +-------------------------+
    | mask_pan(gen_rnd_pan()) |
    +-------------------------+
    | XXXXXXXXXXXX5805        |
    +-------------------------+
    mysql> SELECT mask_pan(gen_rnd_pan(19));
    +---------------------------+
    | mask_pan(gen_rnd_pan(19)) |
    +---------------------------+
    | XXXXXXXXXXXXXXX5067       |
    +---------------------------+
    mysql> SELECT mask_pan_relaxed(gen_rnd_pan());
    +---------------------------------+
    | mask_pan_relaxed(gen_rnd_pan()) |
    +---------------------------------+
    | 398403XXXXXX9547                |
    +---------------------------------+
    mysql> SELECT mask_pan_relaxed(gen_rnd_pan(19));
    +-----------------------------------+
    | mask_pan_relaxed(gen_rnd_pan(19)) |
    +-----------------------------------+
    | 578416XXXXXXXXX6509               |
    +-----------------------------------+
    mysql> SELECT gen_rnd_pan(20);
    ERROR 1123 (HY000): Can't initialize function 'gen_rnd_pan'; Minimal value of argument 0 is 14.
  • gen_rnd_ssn()

    產生一個隨機的美國社會安全號碼,格式為 AAA-BB-CCCCAAA 部分大於 900,這是不會用於合法社會安全號碼的特徵。

    引數

    無。

    傳回值

    一個隨機的社會安全號碼,以 utf8mb4 字元集編碼的字串形式表示。

    範例

    mysql> SELECT gen_rnd_ssn();
    +---------------+
    | gen_rnd_ssn() |
    +---------------+
    | 951-26-0058   |
    +---------------+
  • gen_rnd_uk_nin()

    產生一個隨機的英國國民保險號碼 (UK NIN),格式為九個字元。NIN 以從有效前綴集合中隨機選擇的兩個字元前綴開始,接著是六個隨機數字,以及從有效後綴集合中隨機選擇的一個字元後綴。

    警告

    gen_rnd_uk_nin() 返回的值僅應用於測試目的,不適合發布。無法保證給定的返回值不會被分配給合法的 NIN。如果必須發布 gen_rnd_uk_nin() 的結果,請考慮使用 mask_uk_nin() 將其遮罩。

    引數

    無。

    傳回值

    一個隨機的英國 NIN,以 utf8mb4 字元集編碼的字串形式表示。

    範例

    mysql> SELECT gen_rnd_uk_nin();
    +----------------------+
    | gen_rnd_uk_nin()     |
    +----------------------+
    | QQ123456C            |
    +----------------------+
  • gen_rnd_us_phone()

    產生一個隨機的美國電話號碼,格式為 1-555-AAA-BBBB。555 區碼不適用於合法的電話號碼。

    引數

    無。

    傳回值

    一個隨機的美國電話號碼,以 utf8mb4 字元集編碼的字串形式表示。

    範例

    mysql> SELECT gen_rnd_us_phone();
    +--------------------+
    | gen_rnd_us_phone() |
    +--------------------+
    | 1-555-682-5423     |
    +--------------------+
  • gen_rnd_uuid()

    產生一個以破折號分隔的隨機通用唯一識別碼 (UUID)。

    引數

    無。

    傳回值

    一個隨機的 UUID,以 utf8mb4 字元集編碼的字串形式表示。

    範例

    mysql> SELECT gen_rnd_uuid();
    +--------------------------------------+
    | gen_rnd_uuid()                       |
    +--------------------------------------+
    | 123e4567-e89b-12d3-a456-426614174000 |
    +--------------------------------------+
字典遮罩管理元件函數

本節中的元件函數操作術語字典,並根據它們執行管理遮罩操作。所有這些函數都需要 MASKING_DICTIONARIES_ADMIN 權限。

當建立術語字典時,它會成為字典註冊表的一部分,並被分配一個名稱,以供其他字典函數使用。

  • masking_dictionaries_flush()

    將遮罩字典表中的資料刷新到記憶體快取。需要 MASKING_DICTIONARIES_ADMIN 權限。

  • masking_dictionary_remove(dictionary_name)

    從字典註冊表中移除字典及其所有術語。此函數需要 MASKING_DICTIONARIES_ADMIN 權限。

    引數

    • dictionary_name:一個字串,命名要從字典表中移除的字典。此引數會轉換為 utf8mb4 字元集。

    傳回值

    一個字串,表示移除操作是否成功。1 表示成功。NULL 表示找不到字典名稱。

    範例

    mysql> SELECT masking_dictionary_remove('mydict');
    +-------------------------------------+
    | masking_dictionary_remove('mydict') |
    +-------------------------------------+
    |                                   1 |
    +-------------------------------------+
    mysql> SELECT masking_dictionary_remove('no-such-dict');
    +-------------------------------------------+
    | masking_dictionary_remove('no-such-dict') |
    +-------------------------------------------+
    |                                      NULL |
    +-------------------------------------------+
  • masking_dictionary_term_add(dictionary_name, term_name)

    將一個術語新增到指定的字典。此函數需要 MASKING_DICTIONARIES_ADMIN 權限。

    重要事項

    字典及其術語會持續保存到 mysql 綱要中的一個表格。如果使用者重複執行 gen_dictionary(),任何使用者帳戶都可以存取字典中的所有術語。避免在字典中新增敏感資訊。

    每個術語都由一個指定的字典定義。masking_dictionary_term_add() 允許您一次新增一個字典術語。

    引數

    • dictionary_name:一個字串,提供字典的名稱。此引數會轉換為 utf8mb4 字元集。

    • term_name:一個字串,指定字典表中的術語名稱。此引數會轉換為 utf8mb4 字元集。

    傳回值

    一個字串,表示新增術語操作是否成功。1 表示成功。NULL 表示失敗。新增術語失敗可能因多種原因而發生,包括

    • 已新增具有指定名稱的術語。

    • 找不到字典名稱。

    範例

    mysql> SELECT masking_dictionary_term_add('mydict','newterm');
    +-------------------------------------------------+
    | masking_dictionary_term_add('mydict','newterm') |
    +-------------------------------------------------+
    |                                               1 |
    +-------------------------------------------------+
    mysql> SELECT masking_dictionary_term_add('mydict','');
    +------------------------------------------+
    | masking_dictionary_term_add('mydict','') |
    +------------------------------------------+
    |                                     NULL |
    +------------------------------------------+
  • masking_dictionary_term_remove(dictionary_name, term_name)

    從指定的字典中移除一個術語。此函數需要 MASKING_DICTIONARIES_ADMIN 權限。

    引數

    • dictionary_name:一個字串,提供字典的名稱。此引數會轉換為 utf8mb4 字元集。

    • term_name:一個字串,指定字典表中的術語名稱。此引數會轉換為 utf8mb4 字元集。

    傳回值

    一個字串,表示移除術語操作是否成功。1 表示成功。NULL 表示失敗。移除術語失敗可能因多種原因而發生,包括

    • 找不到具有指定名稱的術語。

    • 找不到字典名稱。

    範例

    mysql> SELECT masking_dictionary_term_add('mydict','newterm');
    +-------------------------------------------------+
    | masking_dictionary_term_add('mydict','newterm') |
    +-------------------------------------------------+
    |                                               1 |
    +-------------------------------------------------+
    mysql> SELECT masking_dictionary_term_remove('mydict','');
    +---------------------------------------------+
    | masking_dictionary_term_remove('mydict','') |
    +---------------------------------------------+
    |                                        NULL |
    +---------------------------------------------+
字典產生元件函數

本節中的元件函數操作術語字典,並根據它們執行產生操作。

當建立術語字典時,它會成為字典註冊表的一部分,並被分配一個名稱,以供其他字典函數使用。

  • gen_blocklist(str, from_dictionary_name, to_dictionary_name)

    將一個字典中存在的術語替換為第二個字典中的術語,並返回替換術語。這會透過替換來遮罩原始術語。

    引數

    • term:一個字串,表示要替換的術語。此引數會轉換為 utf8mb4 字元集。

    • from_dictionary_name:一個字串,命名包含要替換術語的字典。此引數會轉換為 utf8mb4 字元集。

    • to_dictionary_name:一個字串,命名要從中選擇替換術語的字典。此引數會轉換為 utf8mb4 字元集。

    傳回值

    一個以 utf8mb4 字元集編碼的字串,從 to_dictionary_name 中隨機選擇作為 term 的替換,如果 term 未出現在 from_dictionary_name 中,則返回 term;如果任何字典名稱不在字典註冊表中,則返回錯誤。

    注意

    如果要替換的術語同時出現在兩個字典中,則返回值有可能會是相同的術語。

    範例

    mysql> SELECT gen_blocklist('Berlin', 'DE_Cities', 'US_Cities');
    +---------------------------------------------------+
    | gen_blocklist('Berlin', 'DE_Cities', 'US_Cities') |
    +---------------------------------------------------+
    | Phoenix                                           |
    +---------------------------------------------------+
  • gen_dictionary(dictionary_name)

    從字典中返回一個隨機術語。

    引數

    • dictionary_name:一個字串,命名要從中選擇術語的字典。此引數會轉換為 utf8mb4 字元集。

    傳回值

    字典中的一個隨機術語,以 utf8mb4 字元集編碼的字串形式表示;如果字典名稱不在字典註冊表中,則返回 NULL

    範例

    mysql> SELECT gen_dictionary('mydict');
    +--------------------------+
    | gen_dictionary('mydict') |
    +--------------------------+
    | My term                  |
    +--------------------------+
    mysql> SELECT gen_dictionary('no-such-dict');
    ERROR 1123 (HY000): Can't initialize function 'gen_dictionary'; Cannot access 
    dictionary, check if dictionary name is valid.