8.5.3.4 MySQL Enterprise Data Masking and De-Identification Plugin Function Descriptions (original) (raw)

8.5.3.4 MySQL Enterprise Data Masking and De-Identification Plugin Function Descriptions

The MySQL Enterprise Data Masking and De-Identification plugin library includes several functions, which may be grouped into these categories:

These functions support the single-bytelatin1 character set for string arguments and return values. If a string return value should be in a different character set, convert it. The following example shows how to convert the result ofgen_rnd_email() to the utf8mb4 character set:

SET @email = CONVERT(gen_rnd_email() USING utf8mb4);

It may also be necessary to convert string arguments, as illustrated inUsing Masked Data for Customer Identification.

If a MySQL Enterprise Data Masking and De-Identification function is invoked from within themysql client, binary string results display using hexadecimal notation, depending on the value of the--binary-as-hex. For more information about that option, see Section 6.5.1, “mysql — The MySQL Command-Line Client”.

Data Masking Plugin Functions

Each plugin function in this section performs a masking operation on its string argument and returns the masked result.

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                         |  
+---------------------------------+--------------------------------+  
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#####                         |  
+---------------------------------+--------------------------------+  
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');  
+-----------------+  
| mask_pan('a*Z') |  
+-----------------+  
| a*Z             |  
+-----------------+  
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');  
+-------------------------+  
| mask_pan_relaxed('a*Z') |  
+-------------------------+  
| a*Z                     |  
+-------------------------+  
mysql> SELECT mask_ssn('909-63-6922'), mask_ssn('abcdefghijk');  
+-------------------------+-------------------------+  
| mask_ssn('909-63-6922') | mask_ssn('abcdefghijk') |  
+-------------------------+-------------------------+  
| XXX-XX-6922             | XXX-XX-hijk             |  
+-------------------------+-------------------------+  
mysql> SELECT mask_ssn('909');  
ERROR 1123 (HY000): Can't initialize function 'mask_ssn'; MASK_SSN: Error:  
String argument width too small  
mysql> SELECT mask_ssn('123456789123456789');  
ERROR 1123 (HY000): Can't initialize function 'mask_ssn'; MASK_SSN: Error:  
String argument width too large  
Random Data Generation Plugin Functions

The plugin functions in this section generate random values for different types of data. When possible, generated values have characteristics reserved for demonstration or test values, to avoid having them mistaken for legitimate data. For example,gen_rnd_us_phone() returns a US phone number that uses the 555 area code, which is not assigned to phone numbers in actual use. Individual function descriptions describe any exceptions to this principle.

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 |  
+-----------------+  
mysql> SELECT gen_rnd_email();  
+---------------------------+  
| gen_rnd_email()           |  
+---------------------------+  
| ijocv.mwvhhuf@example.com |  
+---------------------------+  
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(11), gen_rnd_pan(20);  
+-----------------+-----------------+  
| gen_rnd_pan(11) | gen_rnd_pan(20) |  
+-----------------+-----------------+  
| NULL            | NULL            |  
+-----------------+-----------------+  
mysql> SELECT gen_rnd_ssn();  
+---------------+  
| gen_rnd_ssn() |  
+---------------+  
| 951-26-0058   |  
+---------------+  
mysql> SELECT gen_rnd_us_phone();  
+--------------------+  
| gen_rnd_us_phone() |  
+--------------------+  
| 1-555-682-5423     |  
+--------------------+  
Random Data Dictionary-Based Plugin Functions

The plugin functions in this section manipulate dictionaries of terms and perform generation and masking operations based on them. Some of these functions require theSUPER privilege.

When a dictionary is loaded, it becomes part of the dictionary registry and is assigned a name to be used by other dictionary functions. Dictionaries are loaded from plain text files containing one term per line. Empty lines are ignored. To be valid, a dictionary file must contain at least one nonempty line.

mysql> SELECT gen_blocklist('Berlin', 'DE_Cities', 'US_Cities');  
+---------------------------------------------------+  
| gen_blocklist('Berlin', 'DE_Cities', 'US_Cities') |  
+---------------------------------------------------+  
| Phoenix                                           |  
+---------------------------------------------------+  
mysql> SELECT gen_dictionary('mydict');  
+--------------------------+  
| gen_dictionary('mydict') |  
+--------------------------+  
| My term                  |  
+--------------------------+  
mysql> SELECT gen_dictionary('no-such-dict');  
+--------------------------------+  
| gen_dictionary('no-such-dict') |  
+--------------------------------+  
| NULL                           |  
+--------------------------------+  
mysql> SELECT gen_dictionary_drop('mydict');  
+-------------------------------+  
| gen_dictionary_drop('mydict') |  
+-------------------------------+  
| Dictionary removed            |  
+-------------------------------+  
mysql> SELECT gen_dictionary_drop('no-such-dict');  
+-------------------------------------+  
| gen_dictionary_drop('no-such-dict') |  
+-------------------------------------+  
| Dictionary removal error            |  
+-------------------------------------+  
mysql> SELECT gen_dictionary_load('/usr/local/mysql/mysql-files/mydict','mydict');  
+---------------------------------------------------------------------+  
| gen_dictionary_load('/usr/local/mysql/mysql-files/mydict','mydict') |  
+---------------------------------------------------------------------+  
| Dictionary load success                                             |  
+---------------------------------------------------------------------+  
mysql> SELECT gen_dictionary_load('/dev/null','null');  
+-----------------------------------------+  
| gen_dictionary_load('/dev/null','null') |  
+-----------------------------------------+  
| Dictionary load error                   |  
+-----------------------------------------+