如何授予用户对所有数据库的只读访问权限

14
我希望在SQL Server上(我使用的是SS2008),让一组用户对所有数据库上的所有表和视图具有只读访问权限。我希望这些用户对于所有未来的表和视图也都具有只读访问权限。
你可以如何设置?

由于这是一个仍然受到很多关注的非常老的问题,请注意在SQL 2014+中,GRANT CONNECT ANY DATABASE TO <SQL_Login>;以及GRANT SELECT ALL USER SECURABLES TO <SQL_Login>;将比旧的方法更容易。 - Dave Mason
3个回答

9

6
这将仅提供对单个数据库的只读访问,而不是所有数据库。您需要为每个数据库执行此操作。 - Martin Liversage

2
DECLARE @dbname VARCHAR(50)
DECLARE @statement NVARCHAR(max)
DECLARE db_cursor CURSOR

LOCAL FAST_FORWARD
FOR SELECT name FROM MASTER.dbo.sysdatabases OPEN db_cursor
    FETCH NEXT FROM db_cursor INTO @dbname 
WHILE @@FETCH_STATUS = 0
BEGIN
    /* This sentence will be executed to gran the privileges. */
    SELECT @statement = 'use ['+@dbname+']; '+'EXEC sp_addrolemember N''db_datareader'', N''userPeter''';
    EXEC sp_executesql @statement
    FETCH NEXT FROM db_cursor INTO @dbname
END

在出现userPeter的位置,您必须填写您的用户名。

0
你只需要将用户添加到每个数据库中的db_datareader数据库角色中即可。你可以编写一个脚本循环遍历数据库并为你执行此操作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接