tsql - Gather output of sp_helpuser for all databases of a SQL Server instance at once -
currently, sp_helpuser has executed each database of sql server instance separately.
does have script give sp_helpuser output databases @ once?
you can achieve below. not sure sql server 2012 works in sql server 2008 r2. mentioning cause sp_msforeachdb undocumented sp , not guaranteed work in future release.
sp_msforeachdb 'use [?] print ''?''; exec sp_helpuser;'; edit:
see below post exact code samples. looking or trying achieve. tsql: audit user roles databases
edit1: complete code post have mentioned. have tried myself in sql2008r2 , warks charm.
if object_id('tempdb..#user_table') not null begin drop table #user_table; end; -- tmp table hold user data create table #user_table ( servername nvarchar(100) null, [database] nvarchar(256) null, username nvarchar(128) not null, groupname nvarchar(128) null, loginname nvarchar(128) null, defdbname nvarchar(256) null, defschemaname nvarchar(100) null, userid integer not null, [sid] uniqueidentifier null ); declare @sql nvarchar(max); set @sql = ' declare @name sysname, @sql_string nvarchar(max); -- cursor containing users current database context declare usr_name cursor read_only select [name] sysusers hasdbaccess = 1 , [name] not ''#%'' , [name] not in (''guest''); open usr_name; fetch next usr_name @name; while (@@fetch_status = 0) -- loop processes each database begin -- if it''s windows login surround square brackets if (@name ''%\%'') begin set @name = ''['' + @name + '']''; end set @sql_string = n''exec sp_helpuser '' + @name; insert #user_table ( username, groupname, loginname, defdbname, defschemaname, userid, [sid] ) exec(@sql_string); -- add server & database name dataset update #user_table set servername = @@servername, [database] = db_name() servername null , [database] null; -- next database user fetch next usr_name @name; -- next user end -- clean close usr_name; deallocate usr_name;'; -- add use database statement change db context set @sql = 'use ?; ' + @sql; -- execute string each database exec sp_msforeachdb @sql; select * #user_table order loginname, [database];
Comments
Post a Comment