有谁知道强制对某个用户发出的所有交易进行 nolock 提示的方法?我想为支持团队提供登录以查询生产系统,但我想通过对他们所做的一切强制执行 nolock 来保护它。我正在使用 SQL Server 2005。
6 回答
您可以配置支持人员的 SQL Management Studio 以将默认事务隔离级别设置为 READ UNCOMMITTED(工具->选项->查询执行->SQL Server->高级)。这在功能上与对所有内容都有 NOLOCK 提示相同。
缺点是您必须为支持团队的每个成员执行此操作,并且他们能够更改其 SQL Management Studio 上的配置。
这是一种痛苦而笨拙的方法,但这是我们在我工作的地方所做的。我们也使用经典的 asp,所以我们使用内联 sql 调用。我们实际上将 sql 调用包装在一个函数中(在这里您可以检查特定用户)并在调用的开头添加“SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED”。
我相信在功能上这与无锁提示相同。抱歉,我没有纯 SQL 的答案,如果您找到一个好的方法,我很想听听。
好的,您需要澄清您在此处尝试执行的操作。
如果您试图减少对数据库的锁定,并可能为您的支持用户提供可能永远不会真正提交到数据库中的数据。虽然允许他们向数据库写入任何他们想要的东西,但 nolock 是要走的路。您将获得额外的好处,即您的用户仍然可以使用 SET TRANSACTION ISOLATION LEVEL 命令提高他们的隔离级别。
如果您试图限制它们在对数据库运行内容时可能造成的损害,请查看实现安全性,确保仅允许它们对您的表进行读取访问,并查看剥离对存储过程和函数的所有访问权限。
我发现 NOLOCK 在堆栈溢出方面被严重误解。
您可以为支持团队创建一个受限用户,然后使用 nolock-hint 编写存储过程或视图。然后只授予对那些而不是直接表选择访问权限。
正如埃斯波暗示的那样,我很确定没有直接的方法可以做你所要求的。正如他所说,您可以通过限制用户仅访问具有内置 NOLOCK 编码的 proc 来完成它。
不幸的是,将用户限制为 SP 违背了此目的。我希望有某种方法可以让他们查询所有内容,从而提高他们的故障排除技能。谢谢你们的帮助。