Solucionar problemas de usuarios huérfanos

Para iniciar sesión en una instancia de Microsoft SQL Server, una entidad de seguridad debe tener un inicio de sesión de SQL Server válido. Este inicio de sesión se utiliza en el proceso de autenticación que verifica si la entidad de seguridad puede conectarse a la instancia de SQL Server. Los inicios de sesión de SQL Server en una instancia de servidor están visibles en la vista de catálogo sys.server_principals y en la vista de compatibilidad sys.syslogins.

Los inicios de sesión de SQL Server tienen acceso a las bases de datos individuales mediante un usuario de base de datos que está asignado al inicio de sesión de SQL Server. Esta regla tiene dos excepciones:

  • La cuenta de invitado.
    Al habilitar esta cuenta en la base de datos se habilitan todos los inicios de sesión de SQL Server que no estén asignados a un usuario de base de datos para entrar en la base de datos como usuario invitado.
  • La pertenencia a grupos de Microsoft Windows.
    Un inicio de sesión de SQL Server creado desde un usuario de Windows puede entrar en una base de datos si este usuario es miembro de un grupo de Windows que también es un usuario en la base de datos.

La información sobre la asignación de un inicio de sesión de SQL Server a un usuario de la base de datos se almacena en la base de datos. Incluye el nombre del usuario de la base de datos y el SID del inicio de sesión de SQL Server correspondiente. Los permisos de este usuario de la base de datos se utilizan para otorgar autorizaciones en la base de datos.

Un usuario de base de datos cuyo inicio de sesión de SQL Server correspondiente está sin definir o está definido de forma incorrecta en una instancia de servidor no podrá iniciar sesión en la instancia. Es lo que se denomina un usuario huérfano de la base de datos en esa instancia de servidor. Un usuario de la base de datos puede convertirse en huérfano si se quita su inicio de sesión de SQL Server correspondiente. También puede convertirse en huérfano si se restaura o conecta una base de datos a otra instancia de SQL Server. Otra manera de convertirse en huérfano es que el SID al que se asigna el usuario de la base de datos no esté presente en la nueva instancia de servidor.

[!NOTA] Un inicio de sesión de SQL Server no puede tener acceso a una base de datos a la que le falte un usuario de base de datos correspondiente, a menos que guest esté habilitado en dicha base de datos. Para obtener información acerca de cómo crear una cuenta de usuario de base de datos, vea CREATE USER (Transact-SQL).

Para detectar usuarios huérfanos

Ejecute las instrucciones de Transact-SQL siguientes:

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

En los resultados se enumeran los usuarios y sus identificadores de seguridad (SID) correspondientes, que se encuentran en la base de datos actual y no están vinculados con ningún inicio de sesión de SQL Server. Para obtener más información, vea sp_change_users_login (Transact-SQL).

[!NOTA] sp_change_users_login no se puede utilizar con los inicios de sesión de SQL Server que se hayan creado desde Windows.

Para resolver un usuario huérfano

Utilice el siguiente procedimiento:

  1. El comando siguiente vuelve a vincular la cuenta de inicio de sesión de servidor especificada en <login_name> con el usuario de la base de datos especificado en <database_user>.

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

    Para obtener más información, vea sp_change_users_login (Transact-SQL).

  2. Una vez ejecutado el código del paso anterior, el usuario podrá obtener acceso a la base de datos. El usuario puede modificar la contraseña de la cuenta de inicio de sesión <login_name> mediante el procedimiento almacenado sp_password tal como se explica a continuación:

    USE master 
    GO
    sp_password @old=NULL, @new='password', @loginame='<login_name>';
    GO;
    
    ms175475.security(es-es,SQL.90).gifNota de seguridad:
    Sólo los inicios de sesión con el permiso ALTER ANY LOGIN pueden cambiar la contraseña de inicio de sesión de otro usuario. Sin embargo, sólo los miembros de la función sysadmin pueden modificar las contraseñas de los miembros de la función sysadmin.

    [!NOTA] No se puede utilizar sp_password para las cuentas de Microsoft Windows. Windows autentica los usuarios que se conectan a una instancia de SQL Server a través de su cuenta de red de Windows y, por tanto, sus contraseñas sólo se pueden cambiar en Windows.

    Para obtener más información, vea sp_password (Transact-SQL).

Vea también

Otros recursos

CREATE USER (Transact-SQL)
CREATE LOGIN (Transact-SQL)
sp_change_users_login (Transact-SQL)
sp_addlogin (Transact-SQL)
sp_grantlogin (Transact-SQL)
sp_password (Transact-SQL)
sys.sysusers (Transact-SQL)
sys.syslogins (Transact-SQL)

Ayuda e información

Obtener ayuda sobre SQL Server 2005