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!'
GO
SQL

Leave a Reply

Your email address will not be published. Required fields are marked *

search previous next tag category expand menu location phone mail time cart zoom edit close