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";