在我们的应用程序登录过程中,运行了几个查询,所有查询都验证了登录。在评估它们时,我注意到其中一个查询是在没有NOLOCK提示的情况下运行的。

似乎没有任何特别危险的脏读,因为数据几乎不会改变。

通过一次又一次尝试失败登录的人尝试DOS类型攻击来考虑它我建议缺少NOLOCK会降低我们失败的门槛。

我认为这是一次极不可能的DOS攻击(我认为Web服务器会先行)但是添加NOLOCK应该会让它变得不可能。

那么,我是过分还是微不足道?

有帮助吗?

解决方案

对您的服务器进行DoS尝试时,您是否担心NOLOCK是最不受欢迎的。

我不会出汗。

正如你所说,如果数据很少改变,那么拥有NOLOCK可能不会受到伤害。

其他提示

是的,你过分琐事。

如果您受到DOS攻击,那么SQL授权调用上的NOLOCK是您最不担心的。实施一些DOS检测,故障跟踪+油门,甚至一些不会影响用户但会减慢攻击的计划暂停......

如果您经常在更广泛的交易中频繁调用该查询,NOLOCK可能会提高您的性能。

考虑脏读的性质 - 可能发生的时间窗口是否真的至关重要?例如您在授权角色中添加或删除某人的位置。

在添加方案中,脏读将在该尝试失败。 (访问被拒绝)

在删除方案中,脏读将对该尝试起作用。 (准入访问)

如果数据通过手动操作改变,例如人类互动 - 他们的“潜伏期”的余地。通常比您的数据库高得多/不确定!

这也是一种非常罕见的情况,但仍然是:目前有人停用了用户以防止他们登录,NOLOCK允许他们进入。可能是一个需要立即锁定的流氓用户/黑客/员工? / p>

你必须关注这个特殊情况才能放弃NOLOCK的性能优势。

通过查看权限,您可以更好地保护您的桌面。像这样的表不应该允许任何直接访问,所有访问都应该来自存储过程以及在它们上设置的权限。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top