【发布时间】:2015-09-01 09:23:00
【问题描述】:
我计划通过对每分钟 ip 设置一些限制来限制来自请求的“主表”(innodb)查询。我的想法是创建包含 ip、日期时间和请求类型的 mysql 表。问题是当有人会尝试蛮力并且限制表会阻止他的行动。对内存表的大量查询会杀死 innodb 表中的其余查询吗?
如果是,我怎样才能最大限度地提高主数据库的容量,并有可能限制来自特定 IP 的特定类型的请求每分钟特定次数?
【问题讨论】:
-
“每分钟”对我来说似乎很慢。 MySQL 能够提供更快的吞吐量。是什么让您认为这种设计是必要的?我敢打赌,对于正确设计和索引的架构来说,您对“大规模”的想法不是问题。
-
@duffymo 我想限制一些操作,以防止暴力强制登录(每分钟 10 次尝试)、垃圾邮件注册(每小时 1 次)或通过一些复杂查询过于频繁地请求某些数据(一切都通过 ip)。
-
数据库不应该这样做;您的中间层需要执行它。我仍然说您低估了数据库和查询优化器。在经过衡量的反应告诉我有必要之前,我不会采取这样的步骤。
-
@duffymo 你说得对,但我仍然需要防止暴力登录或垃圾邮件注册。即使忽略性能,这也是安全问题。
-
不,不是。计算中间层的重试次数并在达到限制时拒绝访问。这与您提出的过于复杂的解决方案完全不同。