8.4.7.4 MySQL 企业防火墙参考
以下各节提供了 MySQL 企业防火墙元素的参考:
-
MySQL 企业防火墙表
-
MySQL 企业防火墙存储过程
-
MySQL 企业防火墙管理功能
-
MySQL 企业防火墙系统变量
-
MySQL 企业防火墙状态变量
MySQL 企业防火墙表
MySQL 企业防火墙根据组和帐户的基础信息维护配置文件信息。它使用mysql
系统数据库中的表进行持久存储,并使用INFORMATION_SCHEMA
或 Performance Schema 表提供对内存中缓存数据的视图。启用后,防火墙基于缓存数据做出操作决策。
-
防火墙组配置文件表
-
防火墙帐户配置文件表
防火墙组配置文件表
截至 MySQL 8.0.23,MySQL 企业防火墙使用mysql
系统数据库中的表来维护组配置文件信息以进行持久存储,并使用 Performance Schema 表提供对内存中缓存数据的视图。
每个系统和 Performance Schema 表只能由具有相应SELECT
权限的帐户访问。
mysql.firewall_groups
表列出了注册的防火墙组配置文件的名称和操作模式。该表具有以下列(相应的 Performance Schema firewall_groups
表具有类似但不一定相同的列):
-
NAME
组配置文件名称。
-
MODE
配置文件的当前操作模式。允许的模式值为
OFF
、DETECTING
、PROTECTING
和RECORDING
。有关它们含义的详细信息,请参见防火墙概念。 -
USERHOST
组配置文件的训练帐户,在配置文件处于
RECORDING
模式时使用。该值为NULL
,或具有格式*
user_name*@*
host_name*
的非NULL
帐户:-
如果值为
NULL
,防火墙将记录来自组成员的任何帐户接收到的 allowlist 规则。 -
如果值为非
NULL
,防火墙仅记录来自指定帐户(应为组的成员)接收的语句的允许列表规则。
-
mysql.firewall_group_allowlist
表列出了注册的防火墙组配置文件的允许列表规则。该表具有以下列(相应的性能模式firewall_group_allowlist
表具有类似但不一定相同的列):
-
NAME
组配置文件名称。
-
RULE
表示配置文件可接受语句模式的规范化语句。配置文件允许列表是其规则的并集。
-
ID
用于表的主键的整数列。
mysql.firewall_membership
表列出了注册的防火墙组配置文件的成员(帐户)。该表具有以下列(相应的性能模式firewall_membership
表具有类似但不一定相同的列):
-
GROUP_ID
组配置文件名称。
-
MEMBER_ID
是配置文件成员的帐户名称。
防火墙帐户配置表
MySQL 企业防火墙使用mysql
系统数据库中的表进行持久存储的帐户配置文件信息,并使用INFORMATION_SCHEMA
表提供对内存中缓存数据的视图。
每个mysql
系统数据库表只能被具有相应SELECT
权限的帐户访问。INFORMATION_SCHEMA
表可被任何人访问。
截至 MySQL 8.0.26,这些表已被弃用,并可能在未来的 MySQL 版本中被移除。请参阅 Migrating Account Profiles to Group Profiles。
mysql.firewall_users
表列出了注册的防火墙帐户配置文件的名称和操作模式。该表具有以下列(相应的MYSQL_FIREWALL_USERS
表具有类似但不一定相同的列):
-
USERHOST
帐户配置文件名称。每个帐户名称的格式为
*
user_name*@*
host_name*
。 -
MODE
配置文件的当前操作模式。允许的模式值为
OFF
、DETECTING
、PROTECTING
、RECORDING
和RESET
。有关其含义的详细信息,请参阅 Firewall Concepts。
mysql.firewall_whitelist
表列出了已注册的防火墙帐户配置文件的允许列表规则。该表具有以下列(相应的MYSQL_FIREWALL_WHITELIST
表具有类似但不一定相同的列):
-
USERHOST
帐户配置文件名称。每个帐户名称的格式为
*
user_name*@*
host_name*
。 -
RULE
表示配置文件的可接受语句模式的规范化语句。配置文件的允许列表是其规则的并集。
-
ID
表的主键是整数列。此列在 MySQL 8.0.12 中添加。
MySQL 企业防火墙存储过程
MySQL 企业防火墙存储过程执行诸如向防火墙注册配置文件、建立其操作模式以及管理防火墙数据在缓存和持久存储之间传输等任务。这些存储过程调用提供用于低级任务的 API 的管理函数。
防火墙存储过程在mysql
系统数据库中创建。要调用防火墙存储过程,可以在mysql
是默认数据库时执行,或者使用数据库名称限定过程名称。例如:
CALL mysql.sp_set_firewall_group_mode(*group*, *mode*);
-
防火墙组配置文件存储过程
-
防火墙帐户配置文件存储过程
-
防火墙杂项存储过程
防火墙组配置文件存储过程
这些存储过程在防火墙组配置文件上执行管理操作:
-
sp_firewall_group_delist(*
group*, *
user*)
此存储过程从防火墙组配置文件中删除一个帐户。
如果调用成功,则组成员身份的更改将同时应用于内存缓存和持久存储。
参数:
-
group
: 受影响的组配置文件的名称。 -
user
: 要移除的帐户,格式为*
user_name*@*
host_name*
。
例子:
CALL sp_firewall_group_delist('g', 'fwuser@localhost');
此存储过程在 MySQL 8.0.23 中添加。
-
-
sp_firewall_group_enlist(*
group*, *
user*)
此存储过程将一个帐户添加到防火墙组配置文件中。在将帐户添加到组之前,不需要将帐户本身注册到防火墙。
如果调用成功,则组成员身份的更改将同时应用于内存缓存和持久存储。
参数:
-
group
: 受影响的组配置文件的名称。 -
user
: 要添加的帐户,格式为*
user_name*@*
host_name*
。
例子:
CALL sp_firewall_group_enlist('g', 'fwuser@localhost');
此存储过程在 MySQL 8.0.23 中添加。
-
-
sp_reload_firewall_group_rules(*
group*)
此存储过程为各个组配置文件提供防火墙操作控制。该过程使用防火墙管理函数从
mysql.firewall_group_allowlist
表中重新加载组配置文件的内存规则。参数:
group
:受影响的组配置文件的名称。
示例:
CALL sp_reload_firewall_group_rules('myapp');
警告
此存储过程在重新加载持久存储中的组配置文件的允许规则之前清除组配置文件的内存中的允许规则,并将配置文件模式设置为
OFF
。如果在调用sp_reload_firewall_group_rules()
之前配置文件模式不是OFF
,则在重新加载规则后使用sp_set_firewall_group_mode()
将其恢复为先前的模式。例如,如果配置文件处于PROTECTING
模式,则在调用sp_reload_firewall_group_rules()
后不再有效,必须显式将其设置为PROTECTING
。此存储过程在 MySQL 8.0.23 中添加。
-
sp_set_firewall_group_mode(*
group*, *
mode*)
此存储过程在将配置文件注册到防火墙后,为防火墙组配置文件建立操作模式,如果尚未注册,则调用防火墙管理函数以在缓存和持久存储之间传输防火墙数据。即使
mysql_firewall_mode
系统变量为OFF
,也可以调用此存储过程,尽管在启用防火墙之前,为配置文件设置模式不会产生操作效果。如果配置文件之前存在,则其任何记录限制保持不变。要设置或清除限制,请改为调用
sp_set_firewall_group_mode_and_user()
。参数:
-
group
:受影响的组配置文件的名称。 -
mode
:配置文件的操作模式,以字符串形式表示。允许的模式值为OFF
、DETECTING
、PROTECTING
和RECORDING
。有关它们的含义的详细信息,请参见防火墙概念。
示例:
CALL sp_set_firewall_group_mode('myapp', 'PROTECTING');
此存储过程在 MySQL 8.0.23 中添加。
-
-
sp_set_firewall_group_mode_and_user(*
group*, *
mode*, *
user*)
此存储过程向防火墙注册一个组并建立其操作模式,类似于
sp_set_firewall_group_mode()
,但还指定了在组处于RECORDING
模式时要使用的训练帐户。参数:
-
group
:受影响的组配置文件的名称。 -
mode
:配置文件的操作模式,以字符串形式表示。允许的模式值为OFF
、DETECTING
、PROTECTING
和RECORDING
。有关它们的含义的详细信息,请参见防火墙概念。 -
user
:组配置文件的训练帐户,在配置文件处于RECORDING
模式时使用。该值为NULL
,或具有格式*
user_name*@*
host_name*
的非NULL
帐户:-
如果数值为
NULL
,防火墙将记录来自任何属于该组的帐户接收到的语句的允许规则。 -
如果值为非
NULL
,则防火墙记录仅允许来自指定账户(应为组的成员)的语句。
-
示例:
CALL sp_set_firewall_group_mode_and_user('myapp', 'RECORDING', 'myapp_user1@localhost');
此过程是在 MySQL 8.0.23 中添加的。
-
防火墙账户配置文件存储过程
这些存储过程执行防火墙账户配置文件的管理操作:
-
sp_reload_firewall_rules(*
user*)
此存储过程为个别账户配置文件提供防火墙操作控制。该过程使用防火墙管理函数从
mysql.firewall_whitelist
表中存储的规则重新加载账户配置文件的内存中规则。参数:
user
: 受影响的账户配置文件的名称,以*
user_name*@*
host_name*
格式的字符串表示。
示例:
CALL mysql.sp_reload_firewall_rules('fwuser@localhost');
警告
此过程在重新加载持久存储中的账户配置文件内存中的允许列表规则之前清除它们,并将配置文件模式设置为
OFF
。如果在调用sp_reload_firewall_rules()
之前配置文件模式不是OFF
,则在重新加载规则后使用sp_set_firewall_mode()
将其恢复为先前的模式。例如,如果配置文件处于PROTECTING
模式,则在调用sp_reload_firewall_rules()
后不再有效,必须显式将其设置为PROTECTING
。从 MySQL 8.0.26 开始,此存储过程已弃用,并可能在将来的 MySQL 版本中删除。请参见将账户配置文件迁移到组配置文件。
-
sp_set_firewall_mode(*
user*, *
mode*)
此存储过程在注册配置文件到防火墙后,为防火墙账户配置文件建立操作模式。必要时,该过程还调用防火墙管理函数以在缓存和持久存储之间传输防火墙数据。即使
mysql_firewall_mode
系统变量为OFF
,也可以调用此过程,尽管在启用防火墙之前,为配置文件设置模式不会产生操作效果。参数:
-
user
: 受影响的账户配置文件的名称,以*
user_name*@*
host_name*
格式的字符串表示。 -
mode
: 该配置文件的操作模式,以字符串形式表示。允许的模式值为OFF
、DETECTING
、PROTECTING
、RECORDING
和RESET
。有关它们含义的详细信息,请参见防火墙概念。
将账户配置文件切换到任何模式,但
RECORDING
会将其防火墙缓存数据同步到提供持久底层存储的mysql
系统数据库表中。将模式从OFF
切换到RECORDING
会将允许列表从mysql.firewall_whitelist
表重新加载到缓存中。如果一个账户配置具有空的允许列表,其模式不能设置为
PROTECTING
,因为该配置将拒绝每个语句,实际上会禁止该账户执行语句。针对这种模式设置尝试,防火墙会生成一条诊断消息,该消息作为结果集返回,而不是作为 SQL 错误:mysql> CALL mysql.sp_set_firewall_mode('a@b','PROTECTING'); +----------------------------------------------------------------------+ | set_firewall_mode(arg_userhost, arg_mode) | +----------------------------------------------------------------------+ | ERROR: PROTECTING mode requested for a@b but the allowlist is empty. | +----------------------------------------------------------------------+
从 MySQL 8.0.26 开始,此过程已被弃用,并可能在未来的 MySQL 版本中移除。请参阅 Migrating Account Profiles to Group Profiles。
-
防火墙杂项存储过程
这些存储过程执行杂项防火墙管理操作。
-
sp_migrate_firewall_user_to_group(*
user*, *
group*)
从 MySQL 8.0.26 开始,账户配置已被弃用,因为组配置可以执行账户配置可以执行的任何操作。
sp_migrate_firewall_user_to_group()
存储过程将防火墙账户配置转换为以该账户为唯一成员的组配置。运行firewall_profile_migration.sql
脚本进行安装。转换过程在 Migrating Account Profiles to Group Profiles 中讨论。此例程需要
FIREWALL_ADMIN
权限。参数:
-
user
: 要转换为组配置的账户配置的名称,以*
user_name*@*
host_name*
格式的字符串。账户配置必须存在,并且不能当前处于RECORDING
模式。 -
group
: 新组配置的名称,该名称不能已存在。新组配置以命名账户作为其唯一成员,并且该成员被设置为组培训账户。组配置操作模式取自账户配置操作模式。
示例:
CALL sp_migrate_firewall_user_to_group('fwuser@localhost', 'mygroup);
此过程已添加到 MySQL 8.0.26 中。
-
MySQL 企业防火墙管理功能
MySQL 企业防火墙管理功能提供了一个 API,用于执行诸如将防火墙缓存与底层系统表同步等较低级别任务。
*在正常操作中,这些功能由防火墙存储过程调用,而不是直接由用户调用。*因此,这些功能描述不包括有关其参数和返回类型的详细信息。
-
防火墙组配置功能
-
防火墙账户配置功能
-
防火墙杂项功能
防火墙组配置功能
这些功能执行防火墙组配置的管理操作:
-
firewall_group_delist(*
group*, *
user*)
此函数从组配置文件中删除帐户。它需要
FIREWALL_ADMIN
权限。示例:
SELECT firewall_group_delist('g', 'fwuser@localhost');
此函数在 MySQL 8.0.23 中添加。
-
firewall_group_enlist(*
group*, *
user*)
此函数将帐户添加到组配置文件中。它需要
FIREWALL_ADMIN
权限。在将帐户添加到组之前,不需要将帐户本身注册到防火墙。
示例:
SELECT firewall_group_enlist('g', 'fwuser@localhost');
此函数在 MySQL 8.0.23 中添加。
-
read_firewall_group_allowlist(*
group*, *
rule*)
此聚合函数通过对
mysql.firewall_group_allowlist
表上的SELECT
语句更新了命名组配置文件的记录语句缓存。它需要FIREWALL_ADMIN
权限。示例:
SELECT read_firewall_group_allowlist('my_fw_group', fgw.rule) FROM mysql.firewall_group_allowlist AS fgw WHERE NAME = 'my_fw_group';
此函数在 MySQL 8.0.23 中添加。
-
read_firewall_groups(*
group*, *
mode*, *
user*)
此聚合函数通过对
mysql.firewall_groups
表上的SELECT
语句更新了防火墙组配置文件缓存。它需要FIREWALL_ADMIN
权限。示例:
SELECT read_firewall_groups('g', 'RECORDING', 'fwuser@localhost') FROM mysql.firewall_groups;
此函数在 MySQL 8.0.23 中添加。
-
set_firewall_group_mode(*
group*, *
mode*[, *
user*])
此函数管理组配置文件缓存,建立配置文件操作模式,并可选择指定配置文件训练帐户。它需要
FIREWALL_ADMIN
权限。如果未提供可选的*
user
参数,则配置文件的先前user
*设置保持不变。要更改设置,请使用第三个参数调用该函数。如果提供了可选的*
user
*参数,则指定组配置文件的训练帐户,用于配置文件处于RECORDING
模式时使用。该值为NULL
,或具有格式*
user_name*@*
host_name*
的非NULL
帐户:-
如果值为
NULL
,防火墙记录允许列表规则用于接收来自任何属于该组的帐户的语句。 -
如果值为非
NULL
,则防火墙仅记录来自命名帐户(应为组成员)的语句的允许列表规则。
示例:
SELECT set_firewall_group_mode('g', 'DETECTING');
此函数在 MySQL 8.0.23 中添加。
-
防火墙帐户配置文件函数
这些函数执行防火墙帐户配置文件的管理操作:
-
read_firewall_users(*
user*, *
mode*)
此聚合函数通过对
mysql.firewall_users
表上的SELECT
语句更新防火墙帐户配置文件缓存。它需要FIREWALL_ADMIN
权限或已弃用的SUPER
权限。示例:
SELECT read_firewall_users('fwuser@localhost', 'RECORDING') FROM mysql.firewall_users;
截至 MySQL 8.0.26 版本,此函数已被弃用,并可能在未来的 MySQL 版本中被移除。请参阅将帐户配置文件迁移到组配置文件。
-
read_firewall_whitelist(*
user*, *
rule*)
此聚合函数通过对
mysql.firewall_whitelist
表上的SELECT
语句更新命名帐户配置文件的记录语句缓存。它需要FIREWALL_ADMIN
权限或已弃用的SUPER
权限。示例:
SELECT read_firewall_whitelist('fwuser@localhost', fw.rule) FROM mysql.firewall_whitelist AS fw WHERE USERHOST = 'fwuser@localhost';
截至 MySQL 8.0.26 版本,此函数已被弃用,并可能在未来的 MySQL 版本中被移除。请参阅将帐户配置文件迁移到组配置文件。
-
set_firewall_mode(*
user*, *
mode*)
此函数管理帐户配置文件缓存并建立配置文件操作模式。它需要
FIREWALL_ADMIN
权限或已弃用的SUPER
权限。示例:
SELECT set_firewall_mode('fwuser@localhost', 'RECORDING');
截至 MySQL 8.0.26 版本,此函数已被弃用,并可能在未来的 MySQL 版本中被移除。请参阅将帐户配置文件迁移到组配置文件。
防火墙杂项函数
这些函数执行各种防火墙操作:
-
mysql_firewall_flush_status()
此函数将多个防火墙状态变量重置为 0:
-
Firewall_access_denied
-
Firewall_access_granted
-
Firewall_access_suspicious
此函数需要
FIREWALL_ADMIN
权限或已弃用的SUPER
权限。示例:
SELECT mysql_firewall_flush_status();
-
-
normalize_statement(*
stmt*)
此函数将 SQL 语句规范化为用于允许列表规则的摘要形式。它需要
FIREWALL_ADMIN
权限或已弃用的SUPER
权限。示例:
SELECT normalize_statement('SELECT * FROM t1 WHERE c1 > 2');
注意
相同的摘要功能在防火墙上下文之外使用
STATEMENT_DIGEST_TEXT()
SQL 函数可用。
MySQL 企业防火墙系统变量
MySQL 企业防火墙支持以下系统变量。使用它们来配置防火墙操作。除非安装了防火墙(参见第 8.4.7.2 节,“安装或卸载 MySQL 企业防火墙”),否则这些变量不可用。
-
mysql_firewall_mode
命令行格式 --mysql-firewall-mode[={OFF|ON}]
系统变量 mysql_firewall_mode
范围 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 ON
MySQL 企业防火墙是否启用(默认情况下)或禁用。
-
mysql_firewall_trace
命令行格式 --mysql-firewall-trace[={OFF|ON}]
系统变量 mysql_firewall_trace
范围 全局 动态 是 SET_VAR
提示适用否 类型 布尔值 默认值 OFF
MySQL 企业防火墙跟踪是否启用或禁用(默认情况下)。当
mysql_firewall_trace
启用时,在PROTECTING
模式下,防火墙会将被拒绝的语句写入错误日志。
MySQL 企业防火墙状态变量
MySQL 企业防火墙支持以下状态变量。使用它们来获取有关防火墙运行状态的信息。除非安装了防火墙(参见第 8.4.7.2 节,“安装或卸载 MySQL 企业防火墙”),否则这些变量不可用。防火墙状态变量在安装MYSQL_FIREWALL
插件或启动服务器时被设置为 0。许多变量通过mysql_firewall_flush_status()
函数重置为零(参见 MySQL 企业防火墙管理函数)。
-
Firewall_access_denied
被 MySQL 企业防火墙拒绝的语句数量。
-
Firewall_access_granted
被 MySQL 企业防火墙接受的语句数量。
-
Firewall_access_suspicious
MySQL 企业防火墙记录为可疑的语句数量,适用于处于
DETECTING
模式的用户。 -
Firewall_cached_entries
MySQL 企业防火墙记录的语句数量,包括重复的语句。
8.5 MySQL 企业数据脱敏和去识别
8.5.1 数据脱敏组件与数据脱敏插件
8.5.2 MySQL 企业数据脱敏和去识别组件
8.5.3 MySQL 企业数据脱敏和去识别插件
注意
MySQL 企业数据脱敏和去识别是包含在 MySQL 企业版中的扩展,这是一款商业产品。要了解更多关于商业产品的信息,请访问www.mysql.com/products/
。
MySQL 企业版提供数据脱敏和去识别功能:
-
转换现有数据以脱敏并删除识别特征,例如将信用卡号的所有数字更改为最后四位为
'X'
字符。 -
生成随机数据,例如电子邮件地址和支付卡号。
-
通过数据库中存储的字典数据替换数据。这些字典可以以标准方式轻松复制。管理权限仅限于被授予特殊权限的授权用户,以便只有他们可以创建和修改字典。
注意
MySQL 企业数据脱敏和去识别最初在 MySQL 8.0.13 中作为插件库实现。截至 MySQL 8.0.33,MySQL 企业版还提供了访问数据脱敏和去识别功能的组件。有关相似之处和差异的信息,请参见表 8.45,“数据脱敏组件与插件元素之间的比较”。
如果您是第一次使用 MySQL 企业数据脱敏和去识别,请考虑安装组件以访问仅在组件基础设施中可用的持续增强功能。
应用程序使用这些功能的方式取决于数据的使用目的和访问者:
-
应用程序使用敏感数据时,可以通过执行数据脱敏并允许使用部分脱敏数据进行客户识别来保护数据。例如:呼叫中心可能会要求客户提供他们社会安全号码的最后四位数字。
-
需要格式正确的数据,但不一定是原始数据的应用程序可以合成样本数据。例如:一个应用程序开发人员正在测试数据验证器,但无法访问原始数据,可以合成具有相同格式的随机数据。
-
必须用字典术语替换真实姓名以保护敏感信息但仍向应用程序用户提供真实内容的应用程序。例如:受限于查看地址的培训用户将从字典
城市名称
中获取随机术语,而不是真实城市名称。这种情况的变体可能是,只有当真实城市名称存在于usa_city_names
中时才替换真实城市名称。
示例 1:
医学研究机构可能保存包含个人和医疗数据混合的患者数据。这可能包括基因序列(长字符串)、以 JSON 格式存储的测试结果和其他数据类型。尽管数据主要由自动分析软件使用,但仍有可能访问特定患者的基因组数据或测试结果。在这种情况下,应使用数据掩码使这些信息不具有个人识别性。
示例 2:
信用卡处理公司提供一组使用敏感数据的服务,例如:
-
每秒处理大量金融交易。
-
存储大量与交易相关的数据。
-
通过对个人数据设置严格要求来保护与交易相关的数据。
-
处理关于使用可逆或部分掩码数据的交易的客户投诉。
典型交易可能包括许多类型的敏感信息,包括:
-
信用卡号码。
-
交易类型和金额。
-
商家类型。
-
交易密文(用于确认交易的合法性)。
-
GPS 设备终端的地理位置(用于欺诈检测)。
这些类型的信息可能会与客户个人数据(例如银行或其他发卡金融机构)合并,例如:
-
客户全名(个人或公司)。
-
地址。
-
出生日期。
-
社会安全号码。
-
电子邮件地址。
-
电话号码。
卡处理公司和金融机构内的各种员工角色需要访问这些数据。其中一些角色可能只需要访问掩码数据。其他角色可能需要根据情况访问原始数据,这些情况记录在审计日志中。
掩码和去标识化是符合监管要求的核心,因此 MySQL 企业数据掩码和去标识化可以帮助应用程序开发人员满足隐私要求:
-
PCI – DSS:支付卡数据。
-
HIPAA:健康数据隐私,经济和临床健康信息技术法案(HITECH 法案)。
-
欧盟《通用数据保护指令》(GDPR):个人数据保护。
-
英国《数据保护法》:个人数据保护。
-
萨班斯·奥克斯利法案、GLBA、美国爱国者法案、1998 年身份盗窃和假冒法案。
-
FERPA – 学生数据,NASD,加州 SB1386 和 AB 1950,州数据保护法律,巴塞尔 II。
以下各节描述了 MySQL 企业数据掩码和去标识化的元素,讨论了如何安装和使用它,并为其元素提供参考信息。
8.5.1 数据遮蔽组件与数据遮蔽插件
原文:
dev.mysql.com/doc/refman/8.0/en/data-masking-components-vs-plugin.html
在 8.0.33 之前,MySQL 使用服务器端插件启用了遮蔽和去识别功能,但在 MySQL 8.0.33 中转而使用了组件基础架构。以下表格简要比较了 MySQL 企业数据遮蔽和去识别组件与插件库,以提供它们之间的区别概述。它可能帮助您从插件过渡到组件。
注意
只能同时启用数据遮蔽组件或插件。同时启用组件和插件不受支持,结果可能不如预期。
表 8.45 数据遮蔽组件与插件元素的比较
类别 | 组件 | 插件 |
---|---|---|
接口 | 服务函数、可加载函数 | 可加载函数 |
支持多字节字符集 | 是,用于通用遮蔽功能 | 否 |
通用遮蔽功能 | mask_inner() , mask_outer() | mask_inner() , mask_outer() |
特定类型的遮蔽 | PAN、SSN、IBAN、UUID、Canada SIN、UK NIN | PAN、SSN |
随机生成,特定类型 | 电子邮件、美国电话、PAN、SSN、IBAN、UUID、Canada SIN、UK NIN | 电子邮件、美国电话、PAN、SSN |
从给定范围生成整数的随机数 | 是 | 是 |
持久化替换字典 | 数据库 | 文件 |
管理字典的权限 | 专用权限 | 文件 |
安装/卸载期间自动加载功能注册/注销 | 是 | 否 |
现有功能的增强 | gen_rnd_email() 函数添加更多参数 | N/A |
类别 | 组件 | 插件 |
8.5.2 MySQL 企业数据脱敏和去标识化组件
原文:
dev.mysql.com/doc/refman/8.0/en/data-masking-components.html
8.5.2.1 MySQL 企业数据脱敏和去标识化组件安装
8.5.2.2 使用 MySQL 企业数据脱敏和去标识化组件
8.5.2.3 MySQL 企业数据脱敏和去标识化组件功能参考
8.5.2.4 MySQL 企业数据脱敏和去标识化组件功能描述
MySQL 企业数据脱敏和去标识化实现了以下元素:
-
mysql
系统数据库中的一张表,用于持久存储字典和术语。 -
一个名为
component_masking
的组件,实现脱敏功能并将其作为服务接口提供给开发人员。希望使用
component_masking
相同服务功能的开发人员应查阅 MySQL 源代码分发中的internal\components\masking\component_masking.h
文件或 https://dev.mysql.com/doc/dev/mysql-server/latest。 -
一个名为
component_masking_functions
的组件,提供可加载函数。一组可加载函数为执行脱敏和去标识化操作提供了 SQL 级 API。其中一些函数需要
MASKING_DICTIONARIES_ADMIN
动态权限。
原文:
dev.mysql.com/doc/refman/8.0/en/data-masking-components-installation.html
8.5.2.1 MySQL 企业数据脱敏和去标识化组件安装
从 MySQL 8.0.33 开始,组件提供了访问 MySQL 企业数据脱敏和去标识化功能的功能。以前,MySQL 将脱敏和去标识化功能实现为包含插件和几个可加载函数的插件库文件。在开始组件安装之前,请删除data_masking
插件及其所有可加载函数,以避免冲突。有关说明,请参见第 8.5.3.1 节,“MySQL 企业数据脱敏和去标识化插件安装”。
MySQL 企业数据脱敏和去标识化数据库表和组件包括:
-
masking_dictionaries
表目的:
mysql
系统模式中的表,提供字典和术语的持久存储。 -
component_masking
组件目的:该组件实现了脱敏功能的核心,并将其作为服务公开。
URN:
file://component_masking
-
component_masking_functions
组件目的:该组件将
component_masking
组件的所有功能作为可加载函数公开。其中一些函数需要MASKING_DICTIONARIES_ADMIN
动态权限。URN:
file://component_masking_functions
要设置 MySQL 企业数据脱敏和去标识化,请执行以下操作:
-
创建
masking_dictionaries
表。CREATE TABLE IF NOT EXISTS mysql.masking_dictionaries( Dictionary VARCHAR(256) NOT NULL, Term VARCHAR(256) NOT NULL, UNIQUE INDEX dictionary_term_idx (Dictionary, Term), INDEX dictionary_idx (Dictionary) ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
-
使用
INSTALL COMPONENT
SQL 语句来安装数据脱敏组件。INSTALL COMPONENT 'file://component_masking'; INSTALL COMPONENT 'file://component_masking_functions';
如果在复制源服务器上使用组件和函数,请在所有副本服务器上安装它们,以避免复制问题。在加载组件时,有关它们的信息可如第 7.5.2 节,“获取组件信息”所述获得。
要移除 MySQL 企业数据脱敏和去标识化,请执行以下操作:
-
使用
UNINSTALL COMPONENT
SQL 语句来卸载数据脱敏组件。UNINSTALL COMPONENT 'file://component_masking'; UNINSTALL COMPONENT 'file://component_masking_functions';
-
删除
masking_dictionaries
表。DROP TABLE mysql.masking_dictionaries;
component_masking_functions
会自动安装所有相关的可加载函数。同样,当卸载该组件时,也会自动卸载这些函数。有关安装或卸载组件的一般信息,请参见第 7.5.1 节,“安装和卸载组件”。
原文:
dev.mysql.com/doc/refman/8.0/en/data-masking-component-usage.html
8.5.2.2 使用 MySQL 企业数据蒙版和去识别组件
在使用 MySQL 企业数据蒙版和去识别之前,请根据提供的说明进行安装,详情请参阅第 8.5.2.1 节,“MySQL 企业数据蒙版和去识别组件安装”。
要在应用程序中使用 MySQL 企业数据蒙版和去识别,请调用适用于您希望执行的操作的函数。有关详细的函数描述,请参阅第 8.5.2.4 节,“MySQL 企业数据蒙版和去识别组件函数描述”。本节演示如何使用这些函数执行一些代表性任务。首先概述可用函数,然后展示一些函数在实际环境中的使用示例:
-
蒙版数据以消除识别特征
-
生成具有特定特征的随机数据
-
使用字典生成随机数据
-
使用蒙版数据进行客户识别
-
创建显示蒙版数据的视图
蒙版数据以消除识别特征
MySQL 提供了通用蒙版组件函数,用于蒙版任意字符串,以及专用蒙版函数,用于蒙版特定类型的值。
通用蒙版组件函数
mask_inner()
和 mask_outer()
是通用函数,根据字符串内的位置蒙版任意字符串的部分。这两个函数支持以任何字符集编码的输入字符串:
-
mask_inner()
对其字符串参数的内部进行蒙版处理,保留末尾未蒙版。其他参数指定未蒙版末尾的大小。mysql> SELECT mask_inner('This is a string', 5, 1); +--------------------------------------+ | mask_inner('This is a string', 5, 1) | +--------------------------------------+ | This XXXXXXXXXXg | +--------------------------------------+ mysql> SELECT mask_inner('This is a string', 1, 5); +--------------------------------------+ | mask_inner('This is a string', 1, 5) | +--------------------------------------+ | TXXXXXXXXXXtring | +--------------------------------------+ mysql> SELECT mask_inner("かすみがうら市", 3, 1); +----------------------------------+ | mask_inner("かすみがうら市", 3, 1) | +----------------------------------+ | かすみXXX 市 | +----------------------------------+ mysql> SELECT mask_inner("かすみがうら市", 1, 3); +----------------------------------+ | mask_inner("かすみがうら市", 1, 3) | +----------------------------------+ | かXXXうら市 | +----------------------------------+
-
mask_outer()
则相反,掩码其字符串参数的两端,保留内部不掩码。其他参数指定掩码端的大小。mysql> SELECT mask_outer('This is a string', 5, 1); +--------------------------------------+ | mask_outer('This is a string', 5, 1) | +--------------------------------------+ | XXXXXis a strinX | +--------------------------------------+ mysql> SELECT mask_outer('This is a string', 1, 5); +--------------------------------------+ | mask_outer('This is a string', 1, 5) | +--------------------------------------+ | Xhis is a sXXXXX | +--------------------------------------+
默认情况下,mask_inner()
和 mask_outer()
使用 'X'
作为掩码字符,但允许使用可选的掩码字符参数:
mysql> SELECT mask_inner('This is a string', 5, 1, '*');
+-------------------------------------------+
| mask_inner('This is a string', 5, 1, '*') |
+-------------------------------------------+
| This **********g |
+-------------------------------------------+
mysql> SELECT mask_inner("かすみがうら市", 2, 2, "#");
+---------------------------------------+
| mask_inner("かすみがうら市", 2, 2, "#") |
+---------------------------------------+
| かす###ら市 |
+---------------------------------------+
特殊用途掩码组件函数
其他掩码函数期望一个表示特定类型值的字符串参数,并对其进行掩码以消除识别特征。
注意
这里的示例使用返回适当类型值的随机值生成函数来提供函数参数。有关生成函数的更多信息,请参阅生成具有特定特征的随机数据。
支付卡主帐号号码掩码。 掩码函数提供主帐号号码的严格和宽松掩码。
-
mask_pan()
掩码号码的除最后四位之外的所有数字:mysql> SELECT mask_pan(gen_rnd_pan()); +-------------------------+ | mask_pan(gen_rnd_pan()) | +-------------------------+ | XXXXXXXXXXXX2461 | +-------------------------+
-
mask_pan_relaxed()
类似,但不掩码指示支付卡发卡方的前六位数字:mysql> SELECT mask_pan_relaxed(gen_rnd_pan()); +---------------------------------+ | mask_pan_relaxed(gen_rnd_pan()) | +---------------------------------+ | 770630XXXXXX0807 | +---------------------------------+
国际银行账号号码掩码。 mask_iban()
掩码号码的除前两个字母(表示国家)之外的所有数字:
mysql> SELECT mask_iban(gen_rnd_iban());
+---------------------------+
| mask_iban(gen_rnd_iban()) |
+---------------------------+
| ZZ** **** **** **** |
+---------------------------+
通用唯一标识符掩码。 mask_uuid()
掩码所有有意义的字符:
mysql> SELECT mask_uuid(gen_rnd_uuid());
+--------------------------------------+
| mask_uuid(gen_rnd_uuid()) |
+--------------------------------------+
| ********-****-****-****-************ |
+--------------------------------------+
美国社会安全号码掩码。 mask_ssn()
掩码号码的除最后四位之外的所有数字:
mysql> SELECT mask_ssn(gen_rnd_ssn());
+-------------------------+
| mask_ssn(gen_rnd_ssn()) |
+-------------------------+
| ***-**-1723 |
+-------------------------+
加拿大社会保险号码掩码。 mask_canada_sin()
掩码号码的有意义数字:
mysql> SELECT mask_canada_sin(gen_rnd_canada_sin());
+---------------------------------------+
| mask_canada_sin(gen_rnd_canada_sin()) |
+---------------------------------------+
| XXX-XXX-XXX |
+---------------------------------------+
英国国民保险号码掩码。 mask_uk_nin()
掩码号码的除前两位之外的所有数字:
mysql> SELECT mask_uk_nin(gen_rnd_uk_nin());
+-------------------------------+
| mask_uk_nin(gen_rnd_uk_nin()) |
+-------------------------------+
| ZH******* |
+-------------------------------+
生成具有特定特征的随机数据
几个组件函数生成随机值。这些值可用于测试、模拟等用途。
gen_range()
从给定范围返回一个随机整数:
mysql> SELECT gen_range(1, 10);
+------------------+
| gen_range(1, 10) |
+------------------+
| 6 |
+------------------+
gen_rnd_canada_sin()
返回从未用于合法号码的范围中选择的随机数:
mysql> SELECT gen_rnd_canada_sin();
+----------------------+
| gen_rnd_canada_sin() |
+----------------------+
(由于其返回值仅用于测试目的,而非出版,因此不显示gen_rnd_canada_sin()
函数的结果。不能保证该数字未分配给合法的加拿大 SIN。)
gen_rnd_email()
返回一个随机的电子邮件地址,名称和姓氏部分在指定域mynet.com
中具有指定数量的数字,如下例所示:
mysql> SELECT gen_rnd_email(6, 8, 'mynet.com');
+------------------------------+
| gen_rnd_email(6, 8, 'mynet') |
+------------------------------+
| ayxnqu.xmkpvvyr@mynet.com |
+------------------------------+
gen_rnd_iban()
返回一个从未用于合法数字的范围中选择的数字:
mysql> SELECT gen_rnd_iban('XO', 24);
+-------------------------------+
| gen_rnd_iban('XO', 24) |
+-------------------------------+
| XO25 SL7A PGQR B9NN 6IVB RFE8 |
+-------------------------------+
gen_rnd_pan()
返回一个随机的支付卡主帐号:
mysql> SELECT gen_rnd_pan();
(由于其返回值仅用于测试目的,而非出版,因此不显示gen_rnd_pan()
函数的结果。不能保证该数字未分配给合法的支付账户。)
gen_rnd_ssn()
返回一个随机的美国社会安全号码,第一部分和第二部分分别从未用于合法数字的范围中选择:
mysql> SELECT gen_rnd_ssn();
+---------------+
| gen_rnd_ssn() |
+---------------+
| 912-45-1615 |
+---------------+
gen_rnd_uk_nin()
返回一个从未用于合法数字的范围中选择的数字:
mysql> SELECT gen_rnd_uk_nin();
+------------------+
| gen_rnd_uk_nin() |
+------------------+
(由于其返回值仅用于测试目的,而非出版,因此不显示gen_rnd_uk_nin()
函数的结果。不能保证该数字未分配给合法的 NIN。)
gen_rnd_us_phone()
返回一个在未用于合法数字的 555 区号中的随机美国电话号码:
mysql> SELECT gen_rnd_us_phone();
+--------------------+
| gen_rnd_us_phone() |
+--------------------+
| 1-555-747-5627 |
+--------------------+
gen_rnd_uuid()
返回一个从未用于合法标识符的范围中选择的数字:
mysql> SELECT gen_rnd_uuid();
+--------------------------------------+
| gen_rnd_uuid() |
+--------------------------------------+
| 68946384-6880-3150-6889-928076732539 |
+--------------------------------------+
使用字典生成随机数据
MySQL 企业数据脱敏和去标识化使得可以将字典用作称为术语的随机值的来源。要使用字典,必须首先将其添加到masking_dictionaries
系统表中并赋予一个名称。这些字典在组件初始化期间(服务器启动时)从表中读取并加载到缓存中。然后可以向字典中添加、移除和选择术语,并将其用作随机值或替换其他值。
注意
始终使用字典管理函数编辑字典,而不是直接修改表格。如果手动操作表格,则字典缓存将与表格不一致。
一个有效的masking_dictionaries
表具有以下特征:
-
管理员在
mysql
模式中创建了masking_dictionaries
系统表如下:CREATE TABLE IF NOT EXISTS masking_dictionaries( Dictionary VARCHAR(256) NOT NULL, Term VARCHAR(256) NOT NULL, UNIQUE INDEX dictionary_term_idx (Dictionary, Term), INDEX dictionary_idx (Dictionary) ) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
-
需要 MASKING_DICTIONARY_ADMIN 权限来添加和删除术语,或者删除整个字典。
-
表中可能包含多个字典及其术语。
-
任何用户账户都可以查看字典。通过足够的查询,所有字典中的术语都是可检索的。避免向字典表中添加敏感数据。
假设一个名为DE_cities
的字典包含德国这些城市的名称:
Berlin
Munich
Bremen
使用masking_dictionary_term_add()
来分配一个字典名称和一个术语:
mysql> SELECT masking_dictionary_term_add('DE_Cities', 'Berlin');
+----------------------------------------------------+
| masking_dictionary_term_add('DE_Cities', 'Berlin') |
+----------------------------------------------------+
| 1 |
+----------------------------------------------------+
mysql> SELECT masking_dictionary_term_add('DE_Cities', 'Munich');
+----------------------------------------------------+
| masking_dictionary_term_add('DE_Cities', 'Munich') |
+----------------------------------------------------+
| 1 |
+----------------------------------------------------+
mysql> SELECT masking_dictionary_term_add('DE_Cities', 'Bremen');
+----------------------------------------------------+
| masking_dictionary_term_add('DE_Cities', 'Bremen') |
+----------------------------------------------------+
| 1 |
+----------------------------------------------------+
还假设一个名为US_Cities
的字典包含美国这些城市的名称:
Houston
Phoenix
Detroit
mysql> SELECT masking_dictionary_term_add('US_Cities', 'Houston');
+-----------------------------------------------------+
| masking_dictionary_term_add('US_Cities', 'Houston') |
+-----------------------------------------------------+
| 1 |
+-----------------------------------------------------+
mysql> SELECT masking_dictionary_term_add('US_Cities', 'Phoenix');
+-----------------------------------------------------+
| masking_dictionary_term_add('US_Cities', 'Phoenix') |
+-----------------------------------------------------+
| 1 |
+-----------------------------------------------------+
mysql> SELECT masking_dictionary_term_add('US_Cities', 'Detroit');
+-----------------------------------------------------+
| masking_dictionary_term_add('US_Cities', 'Detroit') |
+-----------------------------------------------------+
| 1 |
+-----------------------------------------------------+
要从字典中选择一个随机术语,请使用gen_dictionary()
:
mysql> SELECT gen_dictionary('DE_Cities');
+-----------------------------+
| gen_dictionary('DE_Cities') |
+-----------------------------+
| Berlin |
+-----------------------------+
mysql> SELECT gen_dictionary('US_Cities');
+-----------------------------+
| gen_dictionary('US_Cities') |
+-----------------------------+
| Phoenix |
+-----------------------------+
要从多个字典中选择一个随机术语,随机选择一个字典,然后从中选择一个术语:
mysql> SELECT gen_dictionary(ELT(gen_range(1,2), 'DE_Cities', 'US_Cities'));
+---------------------------------------------------------------+
| gen_dictionary(ELT(gen_range(1,2), 'DE_Cities', 'US_Cities')) |
+---------------------------------------------------------------+
| Detroit |
+---------------------------------------------------------------+
mysql> SELECT gen_dictionary(ELT(gen_range(1,2), 'DE_Cities', 'US_Cities'));
+---------------------------------------------------------------+
| gen_dictionary(ELT(gen_range(1,2), 'DE_Cities', 'US_Cities')) |
+---------------------------------------------------------------+
| Bremen |
+---------------------------------------------------------------+
gen_blocklist()
函数使得一个字典中的术语可以被另一个字典中的术语替换,从而实现了掩码替换。它的参数是要替换的术语,术语出现的字典,以及要选择替换的字典。例如,要用美国城市替换德国城市,或者反之,可以像这样使用gen_blocklist()
:
mysql> SELECT gen_blocklist('Munich', 'DE_Cities', 'US_Cities');
+---------------------------------------------------+
| gen_blocklist('Munich', 'DE_Cities', 'US_Cities') |
+---------------------------------------------------+
| Houston |
+---------------------------------------------------+
mysql> SELECT gen_blocklist('El Paso', 'US_Cities', 'DE_Cities');
+----------------------------------------------------+
| gen_blocklist('El Paso', 'US_Cities', 'DE_Cities') |
+----------------------------------------------------+
| Bremen |
+----------------------------------------------------+
如果要替换的术语不在第一个字典中,gen_blocklist()
会原样返回它:
mysql> SELECT gen_blocklist('Moscow', 'DE_Cities', 'US_Cities');
+---------------------------------------------------+
| gen_blocklist('Moscow', 'DE_Cities', 'US_Cities') |
+---------------------------------------------------+
| Moscow |
+---------------------------------------------------+
使用掩码数据进行客户识别
在客服呼叫中心,一个常见的身份验证技术是要求客户提供他们社会安全号码(SSN)的最后四位数字。例如,一个客户可能说她的名字是乔安娜·邦德,她的最后四位 SSN 数字是0007
。
假设包含客户记录的customer
表具有这些列:
-
id
: 客户 ID 号码。 -
first_name
: 客户名字。 -
last_name
: 客户姓氏。 -
ssn
: 客户社会安全号码。
例如,表可能定义如下:
CREATE TABLE customer
(
id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(40),
last_name VARCHAR(40),
ssn VARCHAR(11)
);
客服代表用于检查客户社会安全号码的应用程序可能执行类似这样的查询:
mysql> SELECT id, ssn
mysql> FROM customer
mysql> WHERE first_name = 'Joanna' AND last_name = 'Bond';
+-----+-------------+
| id | ssn |
+-----+-------------+
| 786 | 906-39-0007 |
+-----+-------------+
然而,这会将 SSN 暴露给客服代表,他们除了最后四位数字外不需要看到任何内容。相反,应用程序可以使用这个查询仅显示掩码的 SSN:
mysql> SELECT id, mask_ssn(CONVERT(ssn USING binary)) AS masked_ssn
mysql> FROM customer
mysql> WHERE first_name = 'Joanna' AND last_name = 'Bond';
+-----+-------------+
| id | masked_ssn |
+-----+-------------+
| 786 | ***-**-0007 |
+-----+-------------+
现在代表只看到必要的内容,客户隐私得到保护。
为什么在CONVERT()
函数中使用参数mask_ssn()
?因为mask_ssn()
需要一个长度为 11 的参数。因此,即使ssn
被定义为VARCHAR(11)
,如果ssn
列具有多字节字符集,当传递给可加载函数时可能会看起来比 11 个字节长,并在记录错误时返回NULL
。将值转换为二进制字符串可以确保函数看到长度为 11 的参数。
当字符串参数没有单字节字符集时,可能需要类似的技术来处理其他数据脱敏函数。
创建显示脱敏数据的视图
如果来自表的脱敏数据用于多个查询,定义一个生成脱敏数据的视图可能会很方便。这样,应用程序可以从视图中选择而无需在单独的查询中执行脱敏。
例如,可以像这样定义前一节中customer
表的脱敏视图:
CREATE VIEW masked_customer AS
SELECT id, first_name, last_name,
mask_ssn(CONVERT(ssn USING binary)) AS masked_ssn
FROM customer;
然后查找客户的查询变得更简单,但仍返回脱敏数据:
mysql> SELECT id, masked_ssn
mysql> FROM masked_customer
mysql> WHERE first_name = 'Joanna' AND last_name = 'Bond';
+-----+-------------+
| id | masked_ssn |
+-----+-------------+
| 786 | ***-**-0007 |
+-----+-------------+
原文:
dev.mysql.com/doc/refman/8.0/en/data-masking-component-function-reference.html
8.5.2.3 MySQL 企业数据遮盖和去识别组件函数参考
表 8.46 MySQL 企业数据遮盖和去识别组件函数
名称 | 描述 | 引入版本 |
---|---|---|
gen_blocklist() | 执行字典术语替换 | 8.0.33 |
gen_dictionary() | 从字典返回随机术语 | 8.0.33 |
gen_range() | 在范围内生成随机数 | 8.0.33 |
gen_rnd_canada_sin() | 生成随机加拿大社会保险号码 | 8.0.33 |
gen_rnd_email() | 生成随机电子邮件地址 | 8.0.33 |
gen_rnd_iban() | 生成随机国际银行帐号 | 8.0.33 |
gen_rnd_pan() | 生成随机支付卡主帐号 | 8.0.33 |
gen_rnd_ssn() | 生成随机美国社会安全号码 | 8.0.33 |
gen_rnd_uk_nin() | 生成随机英国国民保险号码 | 8.0.33 |
gen_rnd_us_phone() | 生成随机美国电话号码 | 8.0.33 |
gen_rnd_uuid() | 生成随机通用唯一标识符 | 8.0.33 |
mask_canada_sin() | 遮盖加拿大社会保险号码 | 8.0.33 |
mask_iban() | 遮盖国际银行帐号 | 8.0.33 |
mask_inner() | 遮盖字符串的内部部分 | 8.0.33 |
mask_outer() | 遮盖字符串的左右部分 | 8.0.33 |
mask_pan() | 遮盖支付卡主帐号部分的字符串 | 8.0.33 |
mask_pan_relaxed() | 遮盖支付卡主帐号部分的字符串 | 8.0.33 |
mask_ssn() | 遮盖美国社会安全号码 | 8.0.33 |
mask_uk_nin() | 遮盖英国国民保险号码 | 8.0.33 |
mask_uuid() | 遮蔽字符串中的通用唯一标识符部分 | 8.0.33 |
masking_dictionary_remove() | 从数据库表中移除字典 | 8.0.33 |
masking_dictionary_term_add() | 向字典中添加新术语 | 8.0.33 |
masking_dictionary_term_remove() | 从字典中移除现有术语 | 8.0.33 |
名称 | 描述 | 引入版本 |
原文:
dev.mysql.com/doc/refman/8.0/en/data-masking-component-functions.html
8.5.2.4 MySQL 企业数据掩码和去标识化组件功能描述
MySQL 企业数据掩码和去标识化组件包括几个函数,可以分为以下类别:
-
数据掩码组件函数
-
生成随机数据组件函数
-
字典掩码管理组件函数
-
生成字典组件函数
数据掩码组件函数
本节中的每个组件函数对其字符串参数执行掩码操作并返回掩码结果。
-
mask_canada_sin(*
str* [, *
mask_char*])
掩盖加拿大社会保险号(SIN)并返回所有有意义的数字被
'X'
字符替换的数字。可以指定一个可选的掩盖字符。参数:
-
str
: 需要掩盖的字符串。接受的格式有:-
九个不间隔的数字。
-
九个数字按照模式分组:
xxx-xxx-xxx
('-
'是任何分隔字符)。
此参数将转换为
utf8mb4
字符集。 -
-
mask_char
: (可选)用于掩盖的单个字符。如果未提供*mask_char
*,默认为'X'
。
返回值:
掩盖后的加拿大社会保险号作为一个字符串,编码为
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
*,则默认为'*'
。
返回值:
作为字符串编码在
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
*,则默认为'*'
。
返回值:
作为字符串编码在
utf8mb4
字符集中的掩码 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
:指定范围的上限,必须不小于下限。
返回值:
从*
lower
到upper
范围内的随机整数(以utf8mb4
字符集编码),包括lower
和upper
,如果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*
格式生成一个随机的加拿大社会保险号码。生成的号码通过 Luhn 检查算法,确保此号码的一致性。警告
从
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
: (可选)一个整数,指定地址中名称部分的字符数。如果未提供*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*])
以
*
AAAA* *
BBBB* *
CCCC* *
DDDD*
格式生成一个随机的国际银行账号(IBAN)。生成的字符串以两位字符的国家代码开头,根据 IBAN 规范计算的两位校验数字和随机的字母数字字符,直到达到所需大小。警告
从
gen_rnd_iban()
返回的值仅用于测试目的,如果与有效的国家代码一起使用,则不适合发布。无法保证给定的返回值不会分配给合法的银行账户。如果需要发布gen_rnd_iban()
的结果,请考虑使用mask_iban()
进行掩码处理。参数:
-
country
: (可选)两位字符的国家代码;默认值为ZZ
-
size
: (可选)有意义字符的数量;默认 16,最小 15,最大 34
返回值:
以
utf8mb4
字符集编码的随机 IBAN。示例:
mysql> SELECT gen_rnd_iban(); +-----------------------------+ | gen_rnd_iban() | +-----------------------------+ | ZZ79 3K2J WNH9 1V0DI | +-----------------------------+
-
-
生成一个随机的支付卡主帐号。该号码通过 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*-*
CCCC*
格式生成一个随机的美国社会保障号码。*AAA
*部分大于 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()
进行掩码处理。参数:
无。
返回值:
作为以
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)。
参数:
无。
返回值:
作为
utf8mb4
字符集中编码的字符串的随机 UUID。示例:
mysql> SELECT gen_rnd_uuid(); +--------------------------------------+ | gen_rnd_uuid() | +--------------------------------------+ | 123e4567-e89b-12d3-a456-426614174000 | +--------------------------------------+
字典掩码管理组件函数
本节中的组件函数操作术语字典并根据其执行管理掩码操作。所有这些函数都需要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
字符集。
返回值:
从*
to_dictionary_name
中随机选择的以utf8mb4
字符集编码的字符串作为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.