我如何授予对SQL Server 2008数据库的只读访问权限?

我试图授予SQL Server 2008 R2数据库上的用户帐户的只读访问权限(换句话说,仅select查询)。 我必须授予用户哪些权利才能完成这项工作?

我已经尝试了服务器和数据库本身的权限组合,但是在所有情况下,用户仍然可以运行更新查询,或者根本不能运行任何查询(甚至不能select)。 我总是得到的错误信息是

服务器主体“foo”无法在当前安全上下文中访问数据库“bar”。

谢谢你的帮助,

阿德里安

我通常会按照这些方法做一些事情:

USE [test] GO CREATE USER [ReadOnlyUser] FOR LOGIN [LOCALNT\ReadOnlyNTUser] GO EXEC sp_addrolemember N'db_datareader', N'ReadOnlyUser' 

第一步是创build一个只有 db_datareader权限的用户。

但不要停在那里。 如果这是一个可以运行任何SELECT查询的实际人员login,他们仍然可以导致数据库的很多问题。 这个常见的问题甚至不是一个恶意的用户 – 只是对你的索引,性能调优和高效的查询写作一无所知。 这样就很容易在sql中创build一个拒绝服务的情况。

我只知道如何在每个查询的基础上做到这一点,但至less我知道一些选项:

  1. 限制通过SET ROWCOUNT返回的logging。
  2. 使用SET QUERY_GOVERNOR_COST_LIMIT 。 (请注意,调整这可能是棘手的)。

为了强制用户在查询中包含这些信息,在过去,我使用了一个存储过程,它在运行提供的查询(在正确的只读用户的上下文中)之前首先执行相应的SET。