有谁知道如何对某个用户发出的所有交易强制执行 nolock 提示?我想为支持团队提供一个登录名来查询生产系统,但我想通过对他们所做的一切强制执行 nolock 来保护它。我正在使用 SQL Server 2005。

有帮助吗?

解决方案

这是一种痛苦且笨拙的方法,但这就是我工作的地方正在做的事情。我们还使用经典的 asp,因此我们使用内联 sql 调用。我们实际上将 sql 调用包装在一个函数中(在这里您可以检查特定用户),并将“SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED”添加到调用的开头。

我相信在功能上这与无锁提示相同。抱歉,我没有纯 SQL 答案,我很想听听您是否找到了一个好方法来做到这一点。

其他提示

您可以配置支持人员的 SQL Management Studio,将默认事务隔离级别设置为 READ UNCOMMITTED(工具 -> 选项 -> 查询执行 -> SQL Server -> 高级)。这在功能上与对所有内容都提供 NOLOCK 提示相同。

缺点是您必须为支持团队的每个成员执行此操作,并且他们能够更改 SQL Management Studio 上的配置。

好的,您需要澄清您要在这里做什么。

如果您正在尝试减少对数据库的锁定,并可能为支持用户提供可能永远不会真正提交到数据库中的数据。在允许他们向数据库写入任何内容的同时,nolock 是最佳选择。您将获得额外的好处,即您的用户仍然能够使用 SET TRANSACTION ISOLATION LEVEL 命令提高其隔离级别。

如果您试图限制它们在针对数据库运行内容时可能造成的损害,请考虑实施安全性,确保只允许它们对表进行读访问,并考虑剥离对存储过程和函数的所有访问权限。

我发现 NOLOCK 在堆栈溢出方面被严重误解。

您可以为支持团队创建一个受限用户,然后使用 nolock-hint 编写存储过程或视图。然后只授予对这些的访问权限,而不是直接的表选择访问权限。

正如埃斯波暗示的那样,我很确定没有直接的方法可以满足您的要求。正如他所说,您可以通过限制用户只能访问具有内置 NOLOCK 编码的进程来实现此目的。

不幸的是,将用户限制为 SP 违背了其目的。我希望有某种方法可以让他们查询所有内容,从而提高他们的故障排除技能。谢谢你们的帮助。

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