Compartir a través de


Solucionar problemas de usuarios huérfanos (SQL Server)

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 usa en el proceso de autenticación que comprueba 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 de sys.server_principals y en la vista de compatibilidad sys.syslogins.

SQL Server los inicios de sesión acceden a bases de datos individuales mediante un usuario de base de datos asignado al inicio de sesión de SQL Server. Esta regla tiene dos excepciones:

  • La cuenta de invitado.

    Se trata de una cuenta que, cuando está habilitada en la base de datos, permite SQL Server inicios de sesión que no están asignados a un usuario de base de datos para escribir 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 la base de datos se utilizan para otorgar autorizaciones 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 del 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 base de datos puede quedar huérfano si se quita el inicio de sesión de SQL Server correspondiente. Además, un usuario de base de datos puede quedar huérfano después de restaurar o adjuntar 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 en la que carece de un usuario de base de datos correspondiente a menos que el invitado 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

Ejecute las instrucciones de Transact-SQL siguientes:

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

La salida muestra 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

Utilice el siguiente procedimiento:

  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. Una vez ejecutado el código del paso anterior, el usuario podrá obtener acceso 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 de 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).

Consulte también

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)