Segue procedure para efetuar os ajustes.
create procedure [dbo].[SP_AJUSTA_LOGINS] @db varchar(30) = NULL
as
SET NOCOUNT ON
DECLARE @sql nvarchar(1000)
DECLARE @User sysname
–Temp com os usuarios
CREATE TABLE #tbUsuarios (usuarios sysname,id BIGINT)
IF @db is null
begin
print 'Por segurança, o parametro DataBase é obrigatório. Para executar para todos os DBs utilize sp_ajusta_logins ''TODOS'' ou sp_ajusta_logins ''nome_da_base'''
end else
IF not(upper(Rtrim(lTrim(@db))) = 'TODOS') — Para um db específico
BEGIN
PRINT 'Associando usuários órfãos para o DataBase '+@Db+' – '+convert(varchar,getdate())
SET @sql = @db+'.dbo.sp_change_users_login ''report'''
INSERT INTO #tbUsuarios exec sp_executesql @sql
IF exists(SELECT usuarios FROM #tbUsuarios)
BEGIN
SELECT @User = min(usuarios) from #tbUsuarios
WHILE @User is not null
BEGIN
SELECT @sql = @db+'.dbo.sp_change_users_login ''Update_One'','''+ @User + ''','''+ @User +''''
begin try
EXEC sp_executesql @sql
SET @sql = 'O usuário '''+ @User +''' do database '''+@db +''' foi associado ao seu login '''+@User+''''
Print @sql
end try
begin catch
SET @sql = N'Ocorreu um erro ao atualizar o usuário '''+ @User +''' do database '''+@db+''' – '+ERROR_MESSAGE()
RAISERROR (@sql , 10, 1);
end catch
SELECT @User = min(usuarios) from #tbUsuarios where usuarios > @User
END
END
END
ELSE
BEGIN
print 'Executando SP para todos os DBS
'
— Pesquisa em todos os dbs
SELECT @db = min(name) from master.dbo.sysdatabases where name not in ('tempdb', 'pubs', 'msdb', 'NorthWind', 'master','model')
PRINT 'Associando usuários órfãos para o DataBase '+@Db+' – '+convert(varchar,getdate())
WHILE @db is not null
BEGIN
SET @sql = @db+'.dbo.sp_change_users_login ''report'''
INSERT INTO #tbUsuarios exec sp_executesql @sql
IF exists(SELECT usuarios FROM #tbUsuarios)
BEGIN
SELECT @User = min(usuarios) from #tbUsuarios
WHILE @User is not null
BEGIN
SET @sql = @db+'..sp_change_users_login ''Update_One'','''+ @User + ''','''+ @User +''''
begin try
EXEC sp_executesql @sql
SET @sql = 'O usuário '''+ @User +''' do database '''+@db +''' foi associado ao seu login '''+@User+''''
Print @sql
end try
begin catch
SET @sql = N'Ocorreu um erro ao atualizar o usuário '''+ @User +''' do database '''+@db+''' – '+ERROR_MESSAGE()
RAISERROR (@sql , 10, 1);
end catch
SELECT @User = min(usuarios) from #tbUsuarios where usuarios > @User
END
END
DELETE #tbUsuarios
SELECT @db = min(name) FROM master.dbo.sysdatabases WHERE name not in ('tempdb', 'pubs', 'msdb', 'NorthWind', 'master','model')
AND Name > @db
END
END
DROP TABLE #tbUsuarios
print 'Processo Concluído!'
GO
SQL