如何强制nolock提示sql server登录

时间:2008-09-15 16:00:47

标签: sql sql-server security sql-server-2005 query-optimization

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

6 个答案:

答案 0 :(得分:11)

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

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

答案 1 :(得分:8)

这是一种痛苦和苛刻的方式,但这是我们在工作的地方所做的事情。我们也使用经典的asp,所以我们使用内联sql调用。我们实际上将sql调用包装在一个函数中(这里你可以检查一个特定的用户)并在调用开始时添加“SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED”。

我在功能上相信这与无锁提示相同。对不起,我没有一个纯粹的SQL答案,如果你找到一个很好的方法,我很想知道。

答案 2 :(得分:1)

好的,你需要澄清你在这里要做的事情。

如果您正在尝试减少对数据库的锁定,并可能为您的支持用户提供可能永远不会真正在数据库中提交的数据。虽然允许他们将任何他们想要的东西写入数据库,但是nolock是要走的路。您将获得额外的奖励,您的用户仍然可以使用SET TRANSACTION ISOLATION LEVEL命令提高其隔离级别。

如果您正在尝试限制在对数据库运行时可能造成的损害,请查看实现安全性,确保只允许对表执行读取访问,并查看剥离对存储过程和函数的所有访问权限。

我发现NOLOCK在堆栈溢出时被误解了很多。

答案 3 :(得分:0)

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

答案 4 :(得分:0)

正如Espo暗示的那样,我很确定没有直接的方法来做你所要求的。正如他所说,你可以通过限制用户只访问内置NOLOCK编码的过程来完成它。

答案 5 :(得分:0)

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