tidb4版本,如何将某条sql设为黑名单,永久屏蔽
绑定MAX_EXECUTION_TIME(1)不知道行不行
应该只有max_execution_time的hint。
如何阻止特定的 SQL 语句执行(或者将某个 SQL 语句加入黑名单)?
对于 v7.5.0 及以上版本,你可以使用 QUERY WATCH 语句将特定的 SQL 查询加入黑名单。具体使用方法参见管理资源消耗超出预期的查询 (Runaway Queries)。
对于 v7.5.0 之前版本,你可以使用 MAX_EXECUTION_TIME Hint 来创建 SQL 绑定,将特定语句的执行时间限制为一个较小的值(例如 1ms)。这样,语句就会在超过限制时自动终止。
7.5以前只能用MAX_EXECUTION_TIME这个绑定
4版本应该还没有黑名单的功能
理论上可行,但是还是会请求到服务器
看过官方的这个文档,但是这种方式请求还是会到数据库
这种方式只是限制了请求时间,但不是拦截
那TiDB层面应该就没有别的拦截方法了,或者你在TiDB上面还有负载均衡的中间件也有可能实现,其他的应该就没了。
那没办法了,低版本好像只能这么搞
SQL执行的很频繁吗?
可以从权限方面限制相应用户访问,或者在应用层面去优化SQL
是的,一小时几千次
就是无法追踪到具体的业务模块
连接用haproxy了吗?试试在这层做限制呢?大模型给的配置方法:
frontend mysql_frontend
mode tcp
bind :3306
option tcplog
# 定义需要拦截的SQL关键词ACL
acl dangerous_sql req.payload(0,1024) -m reg -i "(DROP|TRUNCATE|ALTER|CREATE|DELETE FROM|UPDATE .* WHERE 1=1)"
acl drop_table req.payload(0,1024) -m reg -i "DROP TABLE (IF EXISTS )?[a-zA-Z0-9_]+"
acl truncate_table req.payload(0,1024) -m reg -i "TRUNCATE TABLE [a-zA-Z0-9_]+"
# 拦截危险SQL语句
tcp-request content reject if dangerous_sql
tcp-request content reject if drop_table
tcp-request content reject if truncate_table
default_backend mysql_servers
backend mysql_servers
mode tcp
balance leastconn
server mysql1 192.168.1.10:3306 check
server mysql2 192.168.1.11:3306 check
sql黑名单的需求的确第一次听说啊
使用了,但是配置文件也没有frontend和backend的配置啊,万一把服务搞坏了就麻烦了
主要是为了限制一些指定的sql请求到数据库层面
此话题已在最后回复的 7 天后被自动关闭。不再允许新回复。
