在SQL Server中使用(nolock)权限授予ReadOnly

时间:2013-07-10 20:42:17

标签: sql-server permissions sql-server-2008-r2 locking

我正在开发一个带有大量数据库的应用程序,其中包含大量数十亿行的表。我分布在全球各地的开发团队。他们需要出于各种目的访问生产数据库。他们已被授予DB的只读权限。 如果您使用查询with (nolock),它可以正常工作。但是如果你没有使用nolock,你可以通过运行一些永无止境的查询来降低整个应用程序。它在去年发生了几次,所以现在我犹豫是否允许新开发者。

我知道为每个表创建一个视图with (nolock)并仅授予这些视图的权限是一种解决方案,但不知何故我不想为此目的创建200个视图。

我正在寻找一种方法:

  1. 授予权限,使所有查询在没有锁定的情况下运行或
  2. 强制用户使用with (nolock)
  3. 我们正在使用SQL Server 2008 R2。

    PS:到目前为止,我从未遇到过这个问题与另一个基于Oracle的应用程序相比,这个应用程序比这个应用程序大50倍。

1 个答案:

答案 0 :(得分:0)

如果您使用的是Enterprice版本,则可以尝试使用资源调控器。设置查询执行的最长时间。这不是你要求的,但它会解决永无止境的查询问题。您可以查看here(方案2)。

您还可以查看更改数据库属性的方向(Using Snapshot Isolation) - 这可能就是为什么在Oracle中您没有遇到过这样的问题 - 默认情况下Oracle使用它,但对于SQL Server它是相对较新的功能(大于= 2005)。但应该小心,因为它会影响tempdb。