Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  MySQL Enterprise Data Masking and De-Identification Component Function Descriptions

8.5.2.4 MySQL 企业数据屏蔽和去标识化组件函数描述

MySQL 企业数据屏蔽和去标识化组件包括多个函数,可以分为以下类别:

本节中的每个组件函数都对其字符串参数执行屏蔽操作并返回屏蔽结果。

  • mask_canada_sin(str [, mask_char])

    屏蔽加拿大社会保险号(SIN)并将所有有意义的数字替换为'X'字符。可选屏蔽字符可以指定。

    参数:

    • str: 需要mask的字符串。接受的格式是:

      • 九个非分隔数字。

      • 九个数字,按照模式xxx-xxx-xxx(‘-’为任意分隔字符)组合。

      这个参数将被转换到utf8mb4字符集。

    • mask_char:(可选)用来mask的单个字符。如果不给出,缺省为'X'

    返回值:

    utf8mb4字符集编码的masked Canada SIN字符串,如果参数不是正确长度,或者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)mask,返回除了第一个两个字母(表示国家)以外的所有字符都被'*'字符替换。可以指定可选的mask字符。

    参数:

    • str: 需要mask的字符串。每个国家都有不同的国民路由或账户编号系统,总共最少13个,最多34个字母数字ASCII字符。接受的格式是:

      • 非分隔字符。

      • 以四个字符组成,最后一个组除外,并使用空格或其他分隔符字符(例如:xxxx-xxxx-xxxx-xx)。

      这个参数将被转换到 utf8mb4 字符集。

    • mask_char:(可选)用来mask的单个字符。如果不给出mask_char,默认为 '*'

    返回值:

    utf8mb4 字符集编码的masked 国际银行账户号,如果参数不是正确长度,或者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,留下两端不变,并返回结果。可以指定可选的mask字符。

    mask_inner 支持所有字符集。

    参数:

    • str: 需要mask的字符串。这個参数将被转换到 utf8mb4 字符集。

    • margin1: 一个非负整数,指定字符串左端字符的数量。值为 0 时,不留下任何左端字符。

    • margin2: 一个非负整数,指定字符串右端字符的数量。值为 0 时,不留下任何右端字符。

    • mask_char: (可选) 用于masking 的单个字符。如果不给出,缺省为 'X'

    返回值:

    使用相同的字符集编码的字符串,或者如果任何边缘值为负则报错。

    如果边缘值之和大于参数长度,无masking 发生,参数保持不变。

    Note

    函数对单字节字符串进行了优化(字节数和字符数相等)。例如,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,留下中间部分不mask,并返回结果。可以指定可选的masking 字符。

    mask_outer 支持所有字符集。

    参数:

    • str:要mask的字符串。这一个参数将被转换为 utf8mb4 字符集。

    • margin1:一个非负整数,指定字符串左端字符的数量。如果值为 0,左端字符不被mask。

    • margin2:一个非负整数,指定字符串右端字符的数量。如果值为 0,右端字符不被mask。

    • mask_char:(可选)用来mask的单个字符。默认是 'X' 如果没有指定 mask_char

    返回值:

    以用于 str 的字符集编码的masked 字符串,或者如果任何边缘值为负则出错。

    如果边缘值之和大于参数长度,则整个参数被mask。

    Note

    函数优化了单字节字符串(具有等长字节长度和字符长度)的处理。例如,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)mask,返回除了最后四位数字外的所有数字用'X'字符替换。可以指定mask字符。

    参数:

    • str: 需要mask的字符串。该字符串必须包含14到19个字母数字字符。这個参数将被转换为'utf8mb4'字符集。

    • mask_char: (可选) 用于mask的单个字符。如果不指定,缺省为'X'

    返回值:

    'utf8mb4'字符集编码的mask支付号,如果参数不正确长度或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)

    将支付卡主账户号mask,返回除了第六位和最后四位数字外的所有数字用'X'字符替换。前六位数字表示支付卡发卡机构。可以指定mask字符。

    参数:

    • str: 需要mask的字符串。该字符串必须是合适的长度,但不进行其他检查。这個参数将被转换为'utf8mb4'字符集。

    • mask_char:(可选)用来mask的单个字符。如果不给出,缺省为 'X'

    返回值:

    utf8mb4 字符集编码的masked 支付号,如果参数不是正确长度,或者 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)mask,返回除了最后四位数字外的所有数字用 '*' 字符替代。可以指定optional masking 字符。

    参数:

    • str:要mask 的字符串。接受的格式是:

      • 九个非分隔数字。

      • 九个数字,按照模式 xxx-xx-xxxx(‘- 是任意分隔字符)。

      这个参数将被转换到 utf8mb4 字符集。

    • mask_char:(可选)用来mask 的单个字符。如果不给出,缺省为 '*'

    返回值:

    将社会安全号码作为 UTF-8 字符集中的字符串,如果参数不是正确长度,或者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)masked,并返回除了第一个两个数字外的所有数字用'*'字符替代。可选的masking 字符可以指定。

    参数:

    • str: 需要masked 的字符串,接受的格式是:

      • 九个非分隔数字。

      • 九个数字以模式xxx-xx-xxxx(‘-’为任意分隔符)组成。

      • 九个数字以模式xx-xxxxxx-x(‘-’为任意分隔符)组成。

      这个参数将转换到 UTF-8 字符集。

    • mask_char:(可选)用于mask 的单个字符,如果不指定mask_char,默认为'*'

    返回值:

    masked 的 UK NIN 作为 UTF-8 字符集中的字符串,如果参数不是正确长度,或者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])

    将 Universally Unique Identifier(UUID) mask,并返回所有有意义的字符被替换为'*'字符。可选的masking 字符可以指定。

    参数:

    • str: 需要 mask 的字符串,接受的格式为 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,其中‘X’是任何数字和‘-’是任何分隔符字符,这个参数将被转换到utf8mb4 字符集。

    • mask_char:(可选)用于 mask 的单个字符,如果不指定,缺省为 '*'

    返回值:

    utf8mb4 字符集编码的mask UUID,或者如果参数不是正确长度、或字符串格式不正确、或包含多字节字符时返回错误,或者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 之间的随机整数(以 UTF-8 字符集编码),或如果 upper 小于 lower 则返回 NULL。

    Note

    为了生成更好的随机值,建议使用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()

    生成一个随机的加拿大社会保险号(SIN)在AAA-BBB-CCC格式。生成的数字通过 Luhn 检查算法来确保这个号码的一致性。

    Warning

    gen_rnd_canada_sin()返回的值仅供测试使用,不适合出版。不能保证给定的返回值不被分配给合法的加拿大社会保险号。如果需要发布gen_rnd_canada_sin()结果,考虑使用mask_canada_sin()来掩码它。

    参数:

    无。

    返回值:

    一个随机的加拿大社会保险号作为utf8mb4字符集编码的字符串。

    示例:

    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:(可选)整数,指定地址名称部分的字符数。默认为5,如果不给定则使用默认值。

    • surname_size:(可选)整数,指定地址姓氏部分的字符数。默认为7,如果不给定则使用默认值。

    • 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 规则计算的两位校验码,最后是随机的字母数字字符直到所需长度。

    Warning

    gen_rnd_iban()返回的值仅供测试使用,不适合与有效国家代码一起发布,因为无法保证给定的返回值不被分配到合法银行账户。如果需要发布gen_rnd_iban()结果,考虑使用mask_iban()进行掩码。

    参数:

    • country:(可选)国家代码,缺省值为ZZ

    • size:(可选)有意义的字符数,缺省值16,minimum 15,maximum 34

    返回值:

    utf8mb4字符集编码的随机IBAN字符串。

    示例:

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

    生成一个随机的支付卡主账户号码。该号码通过 Luhn 检查(对检验数字进行 checksum 验证)。

    Warning

    gen_rnd_pan()返回的值仅供测试使用,不适合出版。无法保证特定的返回值不被分配给合法支付账户。如果需要发布gen_rnd_pan()结果,考虑使用mask_pan()mask_pan_relaxed()

    参数:

    • 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-CCCC格式。其中,AAA部分大于900,这些特征不用于合法社会安全号码。

    参数:

    无。

    返回值:

    随机的社会安全号码作为 UTF-8 字符集中的字符串。

    示例:

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

    生成九位字符格式的英国国民保险号(UK NIN)。NIN 的前缀随机选择自有效前缀集,数字部分随机选择自六个数字,后缀随机选择自有效后缀集。

    Warning

    gen_rnd_uk_nin() 返回的值仅供测试使用,不适合出版。不能保证特定返回值不被分配给合法的 NIN。如果需要发布 gen_rnd_uk_nin() 结果,考虑使用 mask_uk_nin()

    参数:

    无。

    返回值:

    随机的 UK NIN 作为 UTF-8 字符集中的字符串。

    示例:

    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()

    生成一个带有破折号的随机 Universally Unique Identifier (UUID)。

    参数:

    无。

    返回值:

    一个以 utf8mb4 字符集编码的随机 UUID 字符串。

    示例:

    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特权。

    Important

    字典和其条目将被持久化到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中,则返回错误,如果两个词典名都不是字典注册表中的名称。

    Note

    如果要替换的术语出现在两个词典中,返回值可能是相同的术语。

    示例:

    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.