如何在SQL Server 2012上创建只读服务器角色?


15

创建新服务器角色时,我授予了“查看任何数据库”权限,但意识到该权限仅允许用户查看系统数据库。

我正在尝试创建一个只读服务器角色,并且可以读取任何数据库。

有没有一种方法可以创建用户定义的服务器角色来读取用户数据库?还是我必须通过每个用户的用户映射来做到这一点?

Answers:


16

发布本作只是因为它是太长了评论,因为它的答案是相关的其他用户很快。

SQL Server 2014添加了一些新的服务器级别权限,这些权限将完全适合这种情况-它们在设计时考虑了审核,但这种要求似乎也符合要求。您可以将以下两个权限简单地添加到服务器级登录名:

CONNECT ANY DATABASE

SELECT ALL USER SECURABLES

听起来很像前者,它允许登录名连接到任何数据库。这样做的好处是,即使将来创建的数据库也将允许这样做(前提是您未设置显式拒绝,这是如何保护某些用户数据库免受具有此权限的登录的影响)。后者允许登录名在他们有权访问的任何数据库上执行读取操作-因此它们可以SELECT从表,视图,UDF等进行读取,但是它们将无法执行任何UPDATE操作(我尚未测试过此权限是否了解存储过程执行DML)。结合这些工作的伟大的,如果你想给一个登录广泛开放给整个服务器读取访问,或者更细粒度您可以授予传统的CONNECT特权,某些数据库和SELECT ALL USER SECURABLES右边会适用于登录名具有显式访问权限的数据库。

2014安全更改记录在这里 -好吧,部分; 他们忘记了数据库级别的权限ALTER ANY DATABASE EVENT SESSION-尽管此处无关紧要。


感谢您为即将推出的服务器提供的扩展答案。该操作/检查是在服务器级别进行的。关于数据库兼容性级别是否有任何评论。因此,如果DB CL是​​2012,2014功能是否仍然有效?
SnapJag 2015年

@SnapJag兼容性级别与安全功能没有任何关系,主要与T-SQL的解析方式以及优化器如何生成查询计划有关。
亚伦·伯特兰

@AaronBertrand您知道我们是否可以在服务器级角色上设置权限以允许对任何数据库进行更新吗?(sysadmin固定角色可以肯定,但是我们可以为用户定义的服务器角色吗?)
MaxiWheat

@MaxiWheat不,想不出任何简单的方法,对不起。
亚伦·伯特兰

FWIW这不适用于Azure SQL数据库。GRANT将任何数据库连接到[NameOfUserOrGroup]此版本的SQL Server中不支持安全类'server'。
Dzejms

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.