Usuários órfãos: o que são e como corrigir?

Escrito em 16 de Outubro de 2020 por Patrick Negri

Atualizado em 24 de Agosto de 2023

No dia a dia da gestão de páginas web, vários cuidados devem ser tomados. Ainda assim, alguns problemas podem acontecer. Um deles é a existência de usuários órfãos.

Usuários órfãos costumam aparecer após a empresa migrar um banco de dados SQL server para um novo servidor. Isso pode impedir que os usuários da sua página tenham acesso aos recursos existentes. Afinal, mesmo que a sua conta esteja cadastrada, não haverá um login a ela associado.

Imagine a quantidade de negócios que a sua empresa perderia se os seus clientes não conseguissem fazer logins no seu e-commerce? Por isso, os usuários órfãos devem ser um objeto de atenção de todo gestor. Continue a leitura e veja como lidar com eles!

O que são os usuários órfãos?

Usuário órfão é o termo utilizado para definir as contas de um banco de dados que não estão com um login vinculado a elas. Isso impede que os usuários tenham acesso aos dados, ainda que a sua conta esteja ativa.

Para solucionar esse problema, primeiro é necessário entender como os bancos de dados SQL gerenciam as contas. No SQL, o login é um usuário no nível de instância do banco. Cada um tem uma senha vinculada a si, assim como as políticas de segurança de senha, expiração de login e permissões de acesso ao servidor.

Todos os logins estão vinculados a um usuário, que é criado dentro do banco de dados (onde há o registro dos privilégios que a pessoa terá naquele banco). Como consequência, você pode ter um login para ter acesso à instância em que um grupo de banco de dados se encontra.

Nesse contexto, o usuário órfão surge quando há um utilizador sem um login vinculado ou registrado no banco de dados. Esse é um problema relativamente fácil de resolver e que normalmente aparece após migrações ou restauração de dados. E o melhor de tudo: não há a necessidade de recriar os usuários e logins para restaurar o acesso ao banco de dados.

Como identificar usuários órfãos?

O primeiro passo para lidar com usuários órfãos é fazer a identificação de quantos existem no banco de dados da sua página web ou do seu e-commerce. Existem diferentes maneiras de fazer isso. Uma delas é a partir do seguinte comando:

USE [Testes] EXEC sp_change_users_login 'Report'

Você também pode executar a operação com o apoio do sys.syslogins (útil para os casos em que o banco de dados é executado no SQL Server 2000 ou em uma versão posterior):

SELECT   A.name AS UserName,   A.[sid] AS UserSID FROM   sys.sysusers A WITH(NOLOCK)   LEFT JOIN sys.syslogins B WITH(NOLOCK) ON A.[sid] = B.[sid] WHERE   A.issqluser = 1    AND SUSER_NAME(A.[sid]) IS NULL    AND IS_MEMBER('db_owner') = 1    AND A.[sid] != 0x00   AND A.[sid] IS NOT NULL    AND ( LEN(A.[sid]) <= 16 )    AND B.[sid] IS NULL ORDER BY   A.name

Se o seu SQL Server for o 2008 (e versões mais recentes), você também pode utilizar o sys.database_principals:

SELECT   A.name AS UserName,   A.[sid] AS UserSID FROM   sys.database_principals A WITH(NOLOCK)   LEFT JOIN sys.sql_logins B WITH(NOLOCK) ON A.[sid] = B.[sid]   JOIN sys.server_principals C WITH(NOLOCK) ON A.[name] COLLATE SQL_Latin1_General_CP1_CI_AI = C.[name] COLLATE SQL_Latin1_General_CP1_CI_AI WHERE   A.principal_id > 4   AND B.[sid] IS NULL   AND A.is_fixed_role = 0   AND C.is_fixed_role = 0   AND A.name NOT LIKE '##MS_%'   AND A.[type_desc] = 'SQL_USER'   AND C.[type_desc] = 'SQL_LOGIN'   AND A.name NOT IN ('sa')   AND A.authentication_type <> 0 -- NONE ORDER BY   A.name

Como corrigir o login de um usuário órfão?

Para associar o login “Usuario_Orfao” ao usuário “Usuario_Orfao”, basta executar o comando abaixo:

USE [Testes] EXEC sp_change_users_login ‘Auto_Fix’, ‘Usuario_Orfao’ GO

Para validar a operação, basta executar o seguinte comando:

EXEC sp_change_users_login ‘Report’

Basta verificar se o usuário segue nos seus resultados. Em caso negativo, deu tudo certo!

Como recriar o login de todos os usuários dos meus bancos de dados ao mesmo tempo?

Em alguns casos, a empresa pode ter um grande número de usuários órfãos sem um login a eles vinculado. Nesse caso, o trabalho será um pouco mais extenso. Para recriar os logins, basta executar o comando abaixo:

-- Identifica os usuários órfãos da instância IF (OBJECT_ID('tempdb..#Usuarios_Orfaos') IS NOT NULL) DROP TABLE #Usuarios_Orfaos CREATE TABLE #Usuarios_Orfaos (   [Ranking] INT IDENTITY(1,1),   [Database] sysname,   [Username] sysname,   [SID] UNIQUEIDENTIFIER,   [Command] VARCHAR(MAX) ) INSERT INTO #Usuarios_Orfaos EXEC master.dbo.sp_MSforeachdb ' SELECT   ''?'' AS [database],   A.name,   A.[sid],   ''EXEC [?].[sys].[sp_change_users_login] ''''Auto_Fix'''', '''''' + A.name + '''''''' AS command FROM   [?].sys.database_principals A WITH(NOLOCK)   LEFT JOIN [?].sys.sql_logins B WITH(NOLOCK) ON A.[sid] = B.[sid]   JOIN sys.server_principals C WITH(NOLOCK) ON A.[name] COLLATE SQL_Latin1_General_CP1_CI_AI = C.[name] COLLATE SQL_Latin1_General_CP1_CI_AI WHERE   A.principal_id > 4   AND B.[sid] IS NULL   AND A.is_fixed_role = 0   AND C.is_fixed_role = 0   AND A.name NOT LIKE ''##MS_%''   AND A.[type_desc] = ''SQL_USER''   AND C.[type_desc] = ''SQL_LOGIN''   AND A.name NOT IN (''sa'')   AND A.authentication_type <> 0 -- NONE ORDER BY   A.name' -- Exibe os usuários órfãos da instância SELECT * FROM #Usuarios_Orfaos -- Executa os comandos no banco DECLARE @Comando VARCHAR(MAX) = '' SELECT @Comando += Command + '; ' FROM #Usuarios_Orfaos EXEC(@Comando)

Se você já recriou um login, mas ele não está com o mesmo nome de usuário, a associação é feita da seguinte maneira:

USE [Testes] EXEC sp_change_users_login    'Update_One',    'Usuario_Orfao', -- Usuário   'Usuario_Teste'  -- Login GO

Já nos casos em que há um usuário criado e você deseja associá-lo a outro login, basta utilizar a sequência abaixo:

USE [Testes] EXEC sp_change_users_login    'Auto_Fix',    'Usuario_Orfao', -- Usuário   NULL,       -- Login. Deixar NULL para criar um novo com o mesmo nome do usuário   '123'       -- Senha do Login que será criado GO

O SQL Server é um dos melhores bancos de dados do mercado. Mas ele não está imune a erros. Por isso todo profissional de TI que trabalha com a gestão de sistemas web ou páginas de e-commerce deve estar atento para sempre aplicar as medidas corretivas necessárias caso algo de errado ocorra.

Como você pode perceber, a existência de usuários órfãos não deve ser visto como algo grave: basta utilizar os comandos acima para corrigir o problema e garantir que as suas migrações de bancos de dados ocorram sem problemas!

Gostou da nossa dica? Então assine a newsletter do blog para ficar por dentro dos nossos conteúdos.

Posts relacionados