当前位置: 首页 > 面试题库 >

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

佟高澹
2023-03-14
问题内容

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


问题答案:

一种方法是在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的改进版本在这里

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



 类似资料:
  • 问题内容: 我有一个存储过程,该过程可以找到所有现有数据库并从每个数据库的表中读取数据。 有没有一种方法可以使我对所有数据库以及将来的所有数据库都具有登录读取访问权限,即在添加新数据库时我无需执行任何操作? 有服务器角色可以工作吗?有没有一种方法可以使SQL代理作业在任何新数据库上添加权限?还是有其他方法? 问题答案: 对于新数据库,将用户添加到模型数据库中。这用作所有新数据库的模板。 对于现有数

  • 问题内容: 我已经创建了数据库,例如’mydb’。 现在,我可以从任何地方登录数据库,但是无法创建表。 如何授予该数据库和(将来)表的所有特权。我无法在“ mydb”数据库中创建表。我总是得到: 问题答案: 这就是我创建“超级用户”特权的方式(尽管我通常会指定一个主机)。 虽然此答案可以解决访问问题,但可以创建一个MySQL用户,该用户可以编辑其他用户的权限。 使用GRANT OPTION特权,您

  • 我有一个用户测试。我想授予此用户在所有数据库上的所有权限。怎样才能做到呢?

  • 我想在不使其成为管理员的情况下授予用户数据库的所有权限。我想这样做的原因是目前DEV和PROD是同一集群上的不同DBs,因此我不希望用户能够更改生产对象,但它必须能够更改DEV上的对象。 我尝试了: 但它似乎没有给予任何许可。 然后我尝试: 它似乎允许我创建对象,但不允许我在属于其他用户的模式上查询\delete对象 我可以继续通过给予用户USAGE权限MY_SCHEMA但它会抱怨没有在表上的权限

  • 我有一个不断运行的lambda函数和一些动态创建的SQS队列。我需要一种允许lambda访问所有SQS队列的方法,以便可以使用这些动态创建的队列-我如何做到这一点? 目前,我使用的执行角色具有iam策略和单个队列ARN,但似乎无法创建多个执行角色。

  • 如有任何帮助,我们将不胜感激。