# data_mask_function **Repository Path**: tehran/data_mask_function ## Basic Information - **Project Name**: data_mask_function - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-07-29 - **Last Updated**: 2025-07-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # MySQL 脱敏函数使用 ## 1. 身份证号、手机号、银行卡号 采用 Percona data_masking.so 插件实现数据脱敏 https://docs.percona.com/percona-server/8.0/data-masking-plugin-functions.html ### 安装脱敏插件 ``` mysql> INSTALL PLUGIN data_masking SONAME 'data_masking.so'; mysql> SELECT * FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE 'data%'\G; *************************** 1. row *************************** PLUGIN_NAME: data_masking PLUGIN_VERSION: 1.0 PLUGIN_STATUS: ACTIVE PLUGIN_TYPE: DAEMON PLUGIN_TYPE_VERSION: 80031.0 PLUGIN_LIBRARY: data_masking.so PLUGIN_LIBRARY_VERSION: 1.11 PLUGIN_AUTHOR: Francisco Miguel Biete Banon PLUGIN_DESCRIPTION: Data Masking plugin PLUGIN_LICENSE: GPL LOAD_OPTION: ON 1 row in set (0.00 sec) ``` ### 使用脱敏插件 #### 1. 身份证 ``` mysql> SELECT mask_inner('110101199901011234',6, 2, '*') AS ID_card; +--------------------+ | ID_card | +--------------------+ | 110101**********34 | +--------------------+ 1 row in set (0.00 sec) ``` #### 注:保留身份证号的前6位和后2位,中间部分用'*'替代 #### 2. 手机号 ``` mysql> SELECT mask_inner('13912345678', 3, 2, '*') AS mobile; +-------------+ | mobile | +-------------+ | 139******78 | +-------------+ 1 row in set (0.00 sec) ``` #### 注:保留手机号的前3位和后2位,中间部分用'*'替代 ------------------------------------ ## 2. 邮箱、姓名、金额、地址 采用自主编写的函数实现数据脱敏 ### 安装脱敏函数 ``` mysql> use yourDB; mysql> source /tmp/mask_amount.sql; mysql> source /tmp/mask_email.sql; mysql> source /tmp/mask_address.sql; mysql> source /tmp/mask_chinese_name.sql; ``` ### 使用脱敏函数 #### 1. 邮箱 ``` mysql> SELECT mask_email('abc@sohu.com') AS email; +--------------+ | email | +--------------+ | ***@sohu.com | +--------------+ 1 row in set (0.00 sec) ``` #### 2. 姓名 ``` mysql> SELECT mask_chinese_name('张三') AS name; +------+ | name | +------+ | 张* | +------+ 1 row in set (0.01 sec) mysql> SELECT mask_chinese_name('张某三') AS name; +-------+ | name | +-------+ | 张** | +-------+ 1 row in set (0.00 sec) ``` #### 3. 人民币 ``` mysql> SELECT mask_amount('343.34') AS money; +-------+ | money | +-------+ | **** | +-------+ 1 row in set (0.00 sec) mysql> SELECT mask_amount('99999.34') AS money; +-------+ | money | +-------+ | **** | +-------+ 1 row in set (0.00 sec) ``` #### 4. 家庭住址 ``` mysql> SELECT mask_address('北京市朝阳区霄云路8号') AS address; +-------------------------+ | address | +-------------------------+ | 北京市朝阳区***** | +-------------------------+ 1 row in set (0.00 sec) ```