Ajustar logins orfãos

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!’

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s