Перейти к основному содержимому
Версия: 2.0.x

ADD SQLBLACKLIST

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

Подробнее о чёрном списке SQL см. в Управление чёрным списком SQL.

подсказка
  • Для выполнения этой операции требуется привилегия BLACKLIST на уровне SYSTEM. Вы можете следовать инструкциям в GRANT для предоставления этой привилегии.
  • Чёрный список предназначен только для запросов SELECT, запросов INSERT (с версии v1.5.2) и запросов CTAS (с версии v1.5.2).

Синтаксис

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

Пример 5: Запрет всех запросов INSERT INTO:

ADD SQLBLACKLIST "(?i)^insert\\s+into\\s+.*";

Пример 6: Запрет всех запросов INSERT INTO ... VALUES:

ADD SQLBLACKLIST "(?i)^insert\\s+into\\s+.*values\\s*\\(";

Пример 7: Запрет всех запросов INSERT INTO ... VALUES, кроме запросов к системному представлению _statistics_.column_statistics:

ADD SQLBLACKLIST "(?i)^insert\\s+into\\s+(?!column_statistics\\b).*values\\s*\\(";