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*\\(";