Перейти к основному содержимому

ADD SQLBLACKLIST

ADD SQLBLACKLIST добавляет регулярное выражение в черный список SQL для запрета определенных SQL-паттернов. Когда функция SQL Blacklist включена, Selena сравнивает все SQL-запросы, которые должны быть выполнены, с SQL-регулярными выражениями в черном списке. Selena не выполняет SQL-запросы, которые соответствуют любому регулярному выражению в черном списке, и возвращает ошибку. Это предотвращает выполнение определенных SQL-запросов, которые могут вызвать сбои кластера или неожиданное поведение.

Подробнее о SQL Blacklist см. в разделе Управление SQL Blacklist.

подсказка
  • Эта операция требует привилегии BLACKLIST на уровне SYSTEM. Вы можете следовать инструкциям в GRANT для предоставления этой привилегии.
  • В настоящее время Selena поддерживает добавление SELECT-запросов в SQL Blacklist.

Синтаксис

ADD SQLBLACKLIST "<sql_reg_expr>"

Параметр

sql_reg_expr: регулярное выражение, которое используется для указания определенного SQL-паттерна. Чтобы различать специальные символы в SQL-запросе и символы в регулярном выражении, необходимо использовать escape-символ \ в качестве префикса для специальных символов в SQL-запросе, таких как (, ) и +. Поскольку ( и ) часто используются в SQL-запросах, Selena может распознавать ( и ) в SQL-запросах напрямую. Вам не нужно использовать escape-символ для ( и ).

Примеры

Пример 1: Добавить count(\*) в черный список SQL.

mysql> ADD SQLBLACKLIST "select count(\\*) from .+";

Пример 2: Добавить count(distinct ) в черный список SQL.

mysql> ADD SQLBLACKLIST "select count(distinct .+) from .+";

Пример 3: Добавить order by limit x, y, 1 <= x <=7, 5 <=y <=7 в черный список SQL.

mysql> ADD SQLBLACKLIST "select id_int from test_all_type_select1 
order by id_int
limit [1-7], [5-7]";

Пример 4: Добавить сложное SQL-регулярное выражение в черный список SQL. Этот пример демонстрирует, как использовать escape-символы для * и - в SQL-запросах.

mysql> ADD SQLBLACKLIST 
"select id_int \\* 4, id_tinyint, id_varchar
from test_all_type_nullable
except select id_int, id_tinyint, id_varchar
from test_basic
except select (id_int \\* 9 \\- 8) \\/ 2, id_tinyint, id_varchar
from test_all_type_nullable2
except select id_int, id_tinyint, id_varchar
from test_basic_nullable";