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

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

我正在尝试向 SQL Server 2008 R2 数据库上的用户帐户授予只读访问权限(换句话说:仅选择查询)。我必须授予用户哪些权限才能实现此目的?

我尝试了几种服务器和数据库本身的权限组合,但在所有情况下,用户仍然可以运行更新查询,或者根本无法运行任何查询(甚至无法选择)。我总是收到错误消息

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

感谢您的帮助,

阿德里安

答案1

我通常会做以下几件事:

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

答案2

第一步是创建一个用户仅有的db_datareader 权限。

但不要止步于此。如果这是可以运行任何 SELECT 查询的实际人员的登录名,他们仍然可能导致很多数据库的问题。这里常见的问题甚至不是恶意用户——只是某个不了解您的索引、性能调优和高效查询编写的人。通过这种方式,在 SQL 框上创建拒绝服务的情况非常容易。

我只知道如何根据每个查询执行此操作,但至少我知道几个选项:

  1. 限制通过以下方式返回的记录设置行数
  2. 使用设置查询调控器成本限制. (请注意,调整这一点可能比较棘手)。

为了强制用户将这些内容包含在他们的查询中,过去我使用了一个存储过程,该过程首先执行适当的 SET,然后运行提供的查询(在正确的只读用户的上下文中)。

相关内容