我想屏蔽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);
添加2条规则后的查询结果如下:
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 个查询只能与 1 个规则匹配?
如何使用 ProxySQL 屏蔽多列中的数据?