Я хочу замаскировать конфиденциальную информацию о нескольких столбцах в таблице с именем my_table
, используя ProxySQL.
Я следовал этому учебнику , чтобы успешно замаскировать один столбец с именем column_name
в таблице, используя следующее mysql_query_rules
:
/* only show the first character in column_name */
INSERT INTO mysql_query_rules (rule_id,active,username,schemaname,match_pattern,re_modifiers,replace_pattern,apply)
VALUES (1,1,'developer','my_table','(\(?)(`?\w+`?\.)?\`?column_name\`?(\)?)([ ,\n])','caseless,global',
"\1CONCAT(LEFT(\2column_name,1),REPEAT('X',CHAR_LENGTH(column_name)-1))\3 column_name\4",1);
Но когда я добавляю второе правило для маскировки другого столбца с именем second_column_name
в таблице, proxysql не может замаскировать второй столбец.Вот второе правило:
/* masking the last 3 characters in second_column_name */
INSERT INTO mysql_query_rules (rule_id,active,username,schemaname,match_pattern,re_modifiers,replace_pattern,apply)
VALUES (2,1,'developer','my_table','(\(?)(`?\w+`?\.)?\`?second_column_name\`?(\)?)([ ,\n])','caseless,global',
"\1CONCAT(LEFT(\2second_column_name,CHAR_LENGTH(second_column_name)-3),REPEAT('X',3))\3 second_column_name\4",1);
Вот результат запроса после добавления двух правил:
SELECT column_name FROM my_table;
возвращает замаскированное column_name
.
SELECT second_column_name FROM my_table;
возвращает замаскированное second_column_name
.
SELECT column_name, second_column_name FROM my_table;
возвращает данные с column_name
в маске, но second_column_name
не маскируется.
SELECT second_column_name, column_name FROM my_table;
также возвращает данные с column_name
в маске,но second_column_name
не маскируется.
Означает ли это, что 1 запрос может соответствовать только одному правилу?
Как я могу маскировать данные в нескольких столбцах с помощью ProxySQL?