Solucionando problemas de usuários órfãos

Para fazer logon em uma instância do Microsoft SQL Server, uma entidade deve ter um logon válido no SQL Server. Esse logon é usado no processo de autenticação que verifica se a entidade tem permissão para conectar-se à instância do SQL Server. Os logons do SQL Server em uma instância do servidor são visíveis na exibição do catálogo sys.server_principals e na exibição de compatibilidade sys.syslogins.

Os logons do SQL Server acessam bancos de dados individuais usando um usuário do banco de dados mapeado para o logon do SQL Server. Há duas exceções a essa regra:

  • A conta Convidado.

    Essa é uma conta que, quando habilitada no banco de dados, habilita os logons do SQL Server não mapeados para um usuário do banco de dados para acessar o banco de dados como um usuário convidado.

  • Associação de grupo do Microsoft Windows.

    Um logon do SQL Server criado a partir de um usuário do Windows poderá acessar um banco de dados se esse usuário for membro de um grupo do Windows que também seja um usuário no banco de dados.

Informações sobre o mapeamento de um logon do SQL Server para um usuário do banco de dados são armazenadas no banco de dados. Isso inclui o nome do usuário do banco de dados e o SID do logon do SQL Server correspondente. As permissões desse usuário de banco de dados são usadas para autorização no banco de dados.

Um usuário de banco de dados para o qual o logon do SQL Server correspondente não está definido ou está definido incorretamente em uma instância do servidor não pode fazer logon na instância. Esse um usuário é um usuário órfão do banco de dados nessa instância do servidor. Um usuário do banco de dados torna-se órfão se o logon do SQL Server correspondente for descartado. Além disso, um usuário de banco de dados pode se tornar órfão após um banco de dados ser restaurado ou anexado a uma instância diferente do SQL Server. A condição de órfão pode ocorrer se o usuário do banco de dados for mapeado para um SID que não esteja presente na nova instância do servidor.

ObservaçãoObservação

Um logon do SQL Server não pode acessar um banco de dados no qual não tem um usuário de banco de dados correspondente a menos que o convidado esteja habilitado no banco de dados. Para obter informações sobre como criar uma conta do usuário de banco de dados, consulta CREATE USER (Transact-SQL).

Para detectar usuários órfãos

Para detectar usuários órfãos, execute as seguintes instruções Transact-SQL:

USE <database_name>;
GO; 
sp_change_users_login @Action='Report';
GO;

A saída lista os usuários e os SIDs (identificadores de segurança) correspondentes no banco de dados atual que não estão vinculados a um logon de SQL Server. Para obter mais informações, consulte sp_change_users_login (Transact-SQL).

ObservaçãoObservação

sp_change_users_login não pode ser usado com logons do SQL Server criados no Windows.

Para resolver um usuário órfão

Para resolver um usuário órfão, use o seguinte procedimento:

  1. O comando a seguir vincula novamente a conta de logon do servidor especificada por <login_name> com o usuário de banco de dados especificado por <database_user>.

    USE <database_name>;
    GO
    sp_change_users_login @Action='update_one', @UserNamePattern='<database_user>', 
       @LoginName='<login_name>';
    GO
    

    Para obter mais informações, consulte sp_change_users_login (Transact-SQL).

  2. Depois que você executar o código na etapa anterior, o usuário poderá acessar o banco de dados. O usuário poderá, então, alterar a senha da conta de logon de <login_name> usando o procedimento armazenado sp_password, da seguinte forma:

    USE master 
    GO
    sp_password @old=NULL, @new='password', @loginame='<login_name>';
    GO
    
    Observação sobre segurançaObservação sobre segurança

    Somente logons com a permissão ALTER ANY LOGIN podem alterar a senha do logon de outro usuário. Porém, somente membros da função sysadmin podem modificar senhas de membros da função sysadmin.

    ObservaçãoObservação

    sp_password não pode ser usada para Microsoft contas do Windows. Usuários que se conectam a uma instância do SQL Server pela da conta de rede do Windows são autenticados pelo Windows; portanto, suas senhas só podem ser alteradas no Windows.

    Para obter mais informações, consulte sp_password (Transact-SQL).