Compartir a través de


Solución de problemas de usuarios huérfanos (SQL Server)

Para iniciar sesión en una instancia de Microsoft SQL Server, un principal debe tener credenciales de acceso de SQL Server válidas. Este inicio de sesión se utiliza en el proceso de autenticación, que verifica si el principal tiene permiso para 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 usuarios de SQL Server acceden a bases de datos individuales mediante un usuario de base de datos asignado al inicio de sesión de SQL Server. Hay dos excepciones a esta regla:

  • La cuenta de invitado.

    Se trata de una cuenta que, cuando está habilitada en la base de datos, permite que los inicios de sesión de SQL Server que no están asignados a un usuario de base de datos entren 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 sea 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 base de datos se usan para la autorización en la base de datos.

Un usuario de base de datos para el que el inicio de sesión de SQL Server correspondiente no está definido o está definido incorrectamente en una instancia de servidor no puede 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 quedar huérfano si se elimina el login correspondiente de SQL Server. Además, un usuario de base de datos puede quedar huérfano después de restaurar o adjuntar una base de datos a una instancia diferente de SQL Server. La orfandad puede ocurrir si el usuario de la base de datos está vinculado a un SID que no está presente en la nueva instancia del servidor.

Nota:

Un inicio de sesión de SQL Server no puede acceder a una base de datos en la que carece de un usuario de base de datos correspondiente, a menos que guest esté habilitado en esa base de datos. Para obtener información sobre cómo crear una cuenta de usuario de base de datos, vea CREATE USER (Transact-SQL).

Para detectar usuarios huérfanos

Para detectar usuarios huérfanos, ejecute las siguientes instrucciones Transact-SQL:

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

La salida enumera los usuarios y los identificadores de seguridad (SID) correspondientes en la base de datos actual que no están vinculados a 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 usar con inicios de sesión de SQL Server creados a partir de Windows.

Para resolver un usuario huérfano

Para resolver un usuario huérfano, use el procedimiento siguiente:

  1. El siguiente comando vuelve a vincular la cuenta de inicio de sesión del servidor especificada por <login_name> con el usuario de base de datos especificado por <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. Después de ejecutar el código en el paso anterior, el usuario puede acceder a la base de datos. A continuación, el usuario puede modificar la contraseña de la <cuenta de inicio de sesión de login_name> mediante el procedimiento almacenado sp_password , como se indica a continuación:

    USE master   
    GO  
    sp_password @old=NULL, @new='password', @loginame='<login_name>';  
    GO  
    

    Importante

    Solo los inicios de sesión con el permiso ALTER ANY LOGIN pueden cambiar la contraseña del inicio de sesión de otro usuario. Sin embargo, solo los miembros del rol sysadmin pueden modificar las contraseñas de los miembros del rol sysadmin .

    Nota:

    sp_password no se puede usar para las cuentas de Microsoft Windows. Windows autentica a los usuarios que se conectan a una instancia de SQL Server a través de su cuenta de red de Windows; por lo tanto, sus contraseñas solo se pueden cambiar en Windows.

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

Véase también

CREAR USUARIO (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)