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 utiliza en el proceso de autenticación que comprueba si la entidad de seguridad 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 inicios de sesión de SQL Server tienen acceso a 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 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 cuyo inicio de sesión de SQL Server correspondiente está sin definir o se ha definido de forma incorrecta en una instancia de servidor no podrá iniciar una 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 convertirse en huérfano si se quita el inicio de sesión de SQL Server correspondiente. También puede convertirse en huérfano si una base de datos se restaura o se conecta 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 esté habilitada la opción invitado en dicha 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;
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 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 utilizar con inicios de sesión de SQL Server que se hayan creado desde Windows.
Para resolver un usuario huérfano
Utilice el siguiente procedimiento:
El siguiente comando 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 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).
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 del siguiente modo:
USE master GO sp_password @old=NULL, @new='password', @loginame='<login_name>'; GO
Nota de seguridad 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]
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 solo se pueden cambiar en Windows.
Para obtener más información, vea sp_password (Transact-SQL).