小编典典

SQL Server-如何授予对登录的所有数据库的读取访问权限?

sql

我需要授予对服务器上所有300个数据库的新登录读取访问权限。如何在不选中用户映射区域中的300个复选框的情况下完成此任务?


阅读 221

收藏
2021-04-17

共1个答案

小编典典

一种方法是在SSMS的查询菜单上设置“结果为文本”,然后执行以下操作。

它实际上并没有进行更改,而是生成了一个脚本供您查看和执行。

SET NOCOUNT ON;

DECLARE @user_name    SYSNAME
        , @login_name SYSNAME;

SELECT @user_name = 'user_name',
       @login_name = 'login_name'

SELECT '
    USE ' + QUOTENAME(NAME) + ';

    CREATE USER ' + QUOTENAME(@user_name)
       + ' FOR LOGIN ' + QUOTENAME(@login_name)
       + ' WITH DEFAULT_SCHEMA=[dbo];

    EXEC sys.sp_addrolemember
      ''db_datareader'',
      ''' + QUOTENAME(@user_name) + ''';

    EXEC sys.sp_addrolemember
      ''db_denydatawriter'',
      '''
       + QUOTENAME(@user_name) + ''';

GO
'
FROM   sys.databases
WHERE  database_id > 4
       AND state_desc = 'ONLINE'

或者,你可以看看sys.sp_MSforeachdb 这里或亚伦Bertrand的改进版本在这里

如果运行此命令时未看到所有字符,请打开“文本查询选项”,然后检查“每列中显示的最大字符数”设置。确保将其设置为足够大的值以显示所有字符。

2021-04-17