Answers:
发布本作只是因为它是太长了评论,因为它的答案将是相关的其他用户很快。
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
-尽管此处无关紧要。
没有服务器级别的“读取任何数据库”权限,并且不能授予服务器级别的角色数据库级别的权限
因此,是的,您将必须将用户分别映射到数据库。如果使用的是Active Directory,则可以创建一个Windows组,然后将该组登录到SQL Server,然后在该组的所有数据库中应用db_datareader(不过,您需要在每个数据库中创建用户)。