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.
遮蔽國際銀行帳戶號碼 (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##### | +---------------------------------+--------------------------------+
遮蔽付款卡的 主要帳戶號碼 (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.
遮蔽付款卡的 主要帳戶號碼,並傳回該號碼,其中除了前六位和最後四位數字外,所有字元都以
'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.
遮蔽美國社會安全號碼 (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.
遮蔽通用唯一識別碼 (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 區碼的美國電話號碼,該區碼未分配給實際使用的電話號碼。個別函數說明會描述此原則的任何例外情況。
產生從指定範圍中選取的隨機數字。
引數
lower
:一個整數,指定範圍的下限。upper
:一個整數,指定範圍的上限,其值不得小於下限。
傳回值
範圍從
lower
到upper
(含)的隨機整數(以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 | +-----------------+
產生格式為
的隨機加拿大社會保險號碼 (SIN)。產生的號碼會通過 Luhn 檢查演算法,以確保此號碼的一致性。AAA
-BBB
-CCC
警告從
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 | +---------------------------+
產生一個隨機的國際銀行帳戶號碼 (IBAN),格式為
。產生的字串以兩個字元的國家代碼開頭,接著是根據 IBAN 規範計算出的兩個檢查碼,以及隨機的字母數字字元,直到達到所需的長度。AAAA
BBBB
CCCC
DDDD
警告從
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 | +-----------------------------+
產生一個隨機的支付卡主要帳戶號碼 (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.
產生一個隨機的美國社會安全號碼,格式為
。AAA
-BB
-CCCC
AAA
部分大於 900,這是合法社會安全號碼不會使用的特性。引數
無。
傳回值
一個隨機社會安全號碼,以
utf8mb4
字元集編碼的字串形式表示。範例
mysql> SELECT gen_rnd_ssn(); +---------------+ | gen_rnd_ssn() | +---------------+ | 951-26-0058 | +---------------+
產生一個隨機的英國國民保險號碼 (UK NIN),格式為九個字元。NIN 以從有效字首集合中隨機選擇的兩個字元字首開始,接著是六個隨機數字,以及從有效字尾集合中隨機選擇的一個字元字尾。
警告從
gen_rnd_uk_nin()
返回的值僅應用於測試目的,不適合發布。無法保證給定的返回值不會分配給合法的 NIN。如果需要發布gen_rnd_uk_nin()
的結果,請考慮使用mask_uk_nin()
進行遮罩。引數
無。
傳回值
一個隨機的 UK NIN,以
utf8mb4
字元集編碼的字串形式表示。範例
mysql> SELECT gen_rnd_uk_nin(); +----------------------+ | gen_rnd_uk_nin() | +----------------------+ | QQ123456C | +----------------------+
產生一個隨機的美國電話號碼,格式為
1-555-
。555 區碼不用於合法的電話號碼。AAA
-BBBB
引數
無。
傳回值
一個隨機的美國電話號碼,以
utf8mb4
字元集編碼的字串形式表示。範例
mysql> SELECT gen_rnd_us_phone(); +--------------------+ | gen_rnd_us_phone() | +--------------------+ | 1-555-682-5423 | +--------------------+
產生一個帶有破折號分隔的隨機通用唯一識別碼 (UUID)。
引數
無。
傳回值
一個隨機 UUID,以
utf8mb4
字元集編碼的字串形式表示。範例
mysql> SELECT gen_rnd_uuid(); +--------------------------------------+ | gen_rnd_uuid() | +--------------------------------------+ | 123e4567-e89b-12d3-a456-426614174000 | +--------------------------------------+
本節中的元件函式會操作術語字典,並根據這些字典執行管理遮罩操作。所有這些函式都需要 MASKING_DICTIONARIES_ADMIN
權限。
當建立術語字典時,它會成為字典註冊表的一部分,並被分配一個名稱,供其他字典函式使用。
將遮罩字典表中的資料刷新到記憶體快取。需要
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.