0

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

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

考虑到有人一次又一次地尝试登录失败而进行的 DOS 类型攻击,我认为没有 NOLOCK 会降低我们的失败门槛。

我相信这是 DOS 攻击的极不可能的结果(我认为 Web 服务器会先攻击),但添加 NOLOCK 应该使它从不可能变为不可能。

那么,我是过分还是琐碎?

4

5 回答 5

3

对于针对您的服务器的 DoS 尝试,您最不必担心是否有 NOLOCK。

我不会出汗的。

如您所说,如果数据很少更改,那么在此处使用 NOLOCK 可能不会造成伤害。

于 2008-11-12T14:49:58.880 回答
2

是的,你太过琐碎了。

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

于 2008-11-12T15:06:41.590 回答
0

这也是一个非常罕见的情况,但仍然:就在有人停用用户以阻止他们登录的那一刻,NOLOCK 让他们进入。可能是需要立即锁定的流氓用户/黑客/员工?

您必须担心这种特殊情况才能放弃 NOLOCK 的性能优势。

于 2008-11-12T14:52:45.053 回答
0

如果您经常调用该查询,尤其是在更广泛的事务中,NOLOCK 可能会提高您的性能。

考虑脏读的性质——可能发生这种情况的时间窗口真的很关键吗?例如,您在授权角色中添加或删除某人。

在添加场景中,脏读会在该尝试中失败。(拒绝访问)

在删除场景中,脏读将在该尝试上起作用。(授予访问权限)

如果数据通过手动操作(例如人工交互)发生变化 - 它们的“延迟”余量通常比您的数据库高得多/不确定!

于 2008-11-12T14:56:52.593 回答
0

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

于 2008-11-12T15:54:37.970 回答