我需要授予对服务器上所有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的改进版本在这里
sys.sp_MSforeachdb
如果运行此命令时未看到所有字符,请打开“文本查询选项”,然后检查“每列中显示的最大字符数”设置。确保将其设置为足够大的值以显示所有字符。