Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
Analytics Platform System (PDW)
Los usuarios están huérfanos en SQL Server cuando un usuario de base de datos se basa en un inicio de sesión en la master base de datos, pero el inicio de sesión ya no existe en master. Esto puede ocurrir cuando se elimina el inicio de sesión o cuando la base de datos se mueve a otro servidor en el que el inicio de sesión no existe. En este artículo se describe cómo buscar usuarios huérfanos y reasignarlos a inicios de sesión.
Nota
Para reducir la posibilidad de que se produzcan usuarios huérfanos, use usuarios de bases de datos independientes para aquellas bases de datos susceptibles de moverse. Para obtener más información, vea Uso de bases de datos independientes - Conversión de la base de datos en portátil.
Información previa
Para las conexiones a una base de datos en una instancia de SQL Server que usan una entidad de seguridad (identidad de usuario de base de datos) basada en un inicio de sesión, la entidad de seguridad debe tener un inicio de sesión válido en la master base de datos. Este inicio de sesión se usa en el proceso de autenticación que comprueba la identidad de la entidad de seguridad y determina 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.sql_logins .
Los inicios de sesión de SQL Server acceden a bases de datos individuales como un "usuario de base de datos" asignado al inicio de sesión de SQL Server. Existen tres excepciones a esta regla:
Usuarios de bases de datos independientes
Los usuarios de bases de datos independientes se autentican en el nivel de base de datos de usuario y no están asociados a inicios de sesión. Este modelo se recomienda porque las bases de datos son más portátiles y los usuarios de bases de datos independientes no pueden quedar huérfanos. Sin embargo, deben volver a crearse para cada base de datos. Este modelo podría ser poco práctico en un entorno que tenga muchas bases de datos.
La cuenta de invitado
Cuando se habilita en una base de datos, esta cuenta permite que los inicios de sesión de SQL Server que no estén asignados a un usuario de base de datos accedan a la base de datos como usuario invitado . La cuenta Invitado está deshabilitada de forma predeterminada.
Pertenencias a grupos de Microsoft Windows
Un inicio de sesión de SQL Server creado a partir de un usuario de Windows puede acceder a una base de datos si el usuario de Windows es miembro de un grupo de Windows que también es un usuario de la base de datos.
La información sobre la asignación de un inicio de sesión de SQL Server a un usuario de base de datos se almacena en la base de datos. Incluye el nombre del usuario de la base de datos y el identificador de seguridad (SID) del inicio de sesión de SQL Server correspondiente. Los permisos de este usuario de base de datos se usan para otorgar autorizaciones en la base de datos.
Un usuario de base de datos (basado en un inicio de sesión) 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. La huérfana puede ocurrir si el usuario de la base de datos está asignado a un inicio de sesión SID que no está presente en la master base de datos. Un usuario de la base de datos puede convertirse en huérfano si una base de datos se restaura o se conecta a otra instancia de SQL Server donde nunca se ha creado el inicio de sesión. También puede convertirse en huérfano si se quita el inicio de sesión de SQL Server correspondiente. Aunque se vuelva a crear el inicio de sesión, tendrá un valor diferente SID, por lo que el usuario de la base de datos seguirá siendo huérfano.
Detección de usuarios huérfanos
Para SQL Server y PDW
Para detectar usuarios huérfanos en SQL Server en función de los inicios de sesión de autenticación de SQL Server que faltan, ejecute la siguiente instrucción en la base de datos de usuario:
SELECT dp.type_desc, dp.sid, dp.name AS user_name
FROM sys.database_principals AS dp
LEFT JOIN sys.server_principals AS sp
ON dp.sid = sp.sid
WHERE sp.sid IS NULL
AND dp.authentication_type_desc = 'INSTANCE';
En la salida se enumeran los usuarios de autenticación de SQL Server y los SID correspondientes de la base de datos actual que no están vinculados a ningún inicio de sesión de SQL Server.
Para Azure SQL Database y Azure Synapse Analytics
La tabla sys.server_principals no está disponible en SQL Database o Azure Synapse Analytics. Identifique a los usuarios huérfanos en esos entornos siguiendo estos pasos:
Conéctese a la
masterbase de datos y seleccione los SID para los inicios de sesión mediante la consulta siguiente:SELECT sid FROM sys.sql_logins WHERE type = 'S';Conéctese a la base de datos de usuario y revise los SID de los usuarios de la
sys.database_principalstabla mediante la consulta siguiente:SELECT name, sid, principal_id FROM sys.database_principals WHERE type = 'S' AND name NOT IN ('guest', 'INFORMATION_SCHEMA', 'sys') AND authentication_type_desc = 'INSTANCE';Compare las dos listas para determinar si hay SID de usuario en la tabla de base de datos
sys.database_principalsde usuario que no coinciden con los SID de inicio de sesión de lamastertabla de base de datossql_logins.
Resolución de un usuario huérfano
En la master base de datos, use la instrucción CREATE LOGIN con la SID opción para volver a crear un inicio de sesión que falta. Proporcione el SID del usuario de la base de datos que obtuvo en la sección anterior.
CREATE LOGIN <login_name>
WITH PASSWORD = '<use_a_strong_password_here>',
SID = <SID>;
Para asignar un usuario huérfano a un inicio de sesión que ya existe en master, ejecute la instrucción ALTER USER en la base de datos de usuario y especifique el nombre de inicio de sesión:
ALTER USER <user_name> WITH Login = <login_name>;
Al volver a crear un inicio de sesión que falta, el usuario puede acceder a la base de datos mediante la contraseña proporcionada. A continuación, el usuario puede cambiar la contraseña de la cuenta de inicio de sesión mediante la ALTER LOGIN instrucción :
ALTER LOGIN <login_name> WITH PASSWORD = '<enterStrongPasswordHere>';
Importante
Cualquier inicio de sesión puede cambiar su propia contraseña. 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 .
Contenido relacionado
- CREATE LOGIN (Transact-SQL)
- ALTERAR USUARIO (Transact-SQL)
- CREAR USUARIO (Transact-SQL)
- sys.database_principals (Transact-SQL)
- sys.server_principals (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.sql_logins (Transact-SQL)
- sys.syslogins (Transact-SQL)