代码之家  ›  专栏  ›  技术社区  ›  Brian

用于多列的ProxySQL数据屏蔽

  •  0
  • Brian  · 技术社区  · 5 年前

    我想屏蔽名为 my_table

    我注意到了这一点 tutorial 要成功屏蔽名为 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; 返回一个蒙面的

    SELECT second_column_name FROM my_table; 返回一个蒙面的 第二列名称 .

    SELECT column_name, second_column_name FROM my_table; 返回带有 蒙面,但是 他没有戴面具。

    SELECT second_column_name, column_name FROM my_table; 列名 第二列名称

    这是否意味着1个查询只能与1个规则匹配?

    如何使用ProxySQL屏蔽多列中的数据?

    0 回复  |  直到 5 年前
        1
  •  1
  •   Brian    5 年前

    使用 flagIN , flagOUT , and apply

    这是决赛 mysql_query_rules

    /* only show the first character in column_name */
    INSERT INTO mysql_query_rules (rule_id,active,username,schemaname,flagIN,match_pattern,re_modifiers,flagOUT,replace_pattern,apply)
              VALUES (1,1,'developer','my_db',0,'(\(?)(`?\w+`?\.)?\`?column_name\`?(\)?)([ ,\n])','caseless,global',6,    "\1CONCAT(LEFT(\2column_name,1),REPEAT('X',CHAR_LENGTH(column_name)-1))\3 column_name\4",0);
    
    /* masking the last 3 characters in second_column_name */
    INSERT INTO mysql_query_rules (rule_id,active,username,schemaname,flagIN,match_pattern,re_modifiers,flagOUT,replace_pattern,apply)
              VALUES (2,1,'developer','my_db',6,'(\(?)(`?\w+`?\.)?\`?second_column_name\`?(\)?)([ ,\n])','caseless,global',NULL,
                    "\1CONCAT(LEFT(\2second_column_name,CHAR_LENGTH(second_column_name)-3),REPEAT('X',3))\3 second_column_name\4",1);
    

    • 弗拉金 , 信号旗 应用 -这些允许我们创建“规则链” 0,并且在开始时仅考虑flagIN=0的规则。什么时候 找到特定查询的匹配规则后,将计算flagOUT 如果不为NULL,则查询将使用中指定的标志进行标记 当前链,并进入一个新的规则链,其中flagIN作为 新输入标志。如果flagOUT与flagIN匹配,则查询将被删除 使用所述flagIN根据第一条规则重新评估。这 直到不再存在匹配规则,或将“应用”设置为1时发生