我试图授予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我知道一些选项:
为了强制用户在查询中包含这些信息,在过去,我使用了一个存储过程,它在运行提供的查询(在正确的只读用户的上下文中)之前首先执行相应的SET。