Compartir vía


sp_change_users_login (Transact-SQL)

Se aplica a: SQL Server

Asigna un usuario de base de datos existente a un inicio de sesión de SQL Server.

Importante

Esta característica se quitará en una versión futura de SQL Server. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan. Use ALTER USER en su lugar.

Convenciones de sintaxis de Transact-SQL

Sintaxis

sp_change_users_login
    [ @Action = ] 'Action'
    [ , [ @UserNamePattern = ] N'UserNamePattern' ]
    [ , [ @LoginName = ] N'LoginName' ]
    [ , [ @Password = ] N'Password' ]
[ ; ]

Argumentos

[ @Action = ] 'Acción'

Describe la acción del procedimiento almacenado que se va a realizar. @Action es varchar(10), sin valor predeterminado y puede tener uno de los valores siguientes.

Valor Descripción
Auto_Fix Vincula una entrada de usuario en la vista de catálogo del sys.database_principals sistema de la base de datos actual a un inicio de sesión de SQL Server con el mismo nombre. Si no existe un inicio de sesión con el mismo nombre, se crea uno. Examine el resultado de la Auto_Fix instrucción para confirmar que el vínculo correcto se realiza de hecho. Evite el uso Auto_Fix en situaciones sensibles a la seguridad.

Al usar Auto_Fix, debe especificar @UserNamePattern y @Password si el inicio de sesión aún no existe; de lo contrario, debe especificar @UserNamePattern pero @Password se omite. @LoginName debe ser NULL. @UserNamePattern debe ser un usuario válido en la base de datos actual. El inicio de sesión no puede tener otro usuario asignado a él.
Report Enumera los usuarios y los identificadores de seguridad (SID) correspondientes de la base de datos actual que no están vinculados a ningún inicio de sesión. @UserNamePattern, @LoginName y @Password deben especificarse NULL o no.

Para reemplazar la opción de informe por una consulta mediante las tablas del sistema, compare las entradas de sys.server_prinicpals con las entradas de sys.database_principals.
Update_One Vincula el @UserNamePattern especificado en la base de datos actual a un @LoginName de SQL Server existente. @UserNamePattern y @LoginName deben especificarse. @Password debe especificarse NULL o no.

[ @UserNamePattern = ] N'UserNamePattern'

Nombre de un usuario de la base de datos actual. @UserNamePattern es sysname, con un valor predeterminado de NULL.

[ @LoginName = ] N'LoginName'

Nombre de un inicio de sesión de SQL Server. @LoginName es sysname, con un valor predeterminado de NULL.

[ @Password = ] N'Contraseña'

Contraseña asignada a un nuevo inicio de sesión de SQL Server que se crea especificando Auto_Fix. @Password es sysname y no puede ser NULL. Si ya existe un inicio de sesión coincidente, el usuario y el inicio de sesión se asignan y @Password se omiten. Si no existe un inicio de sesión coincidente, sp_change_users_login crea un nuevo inicio de sesión de SQL Server y asigna @Password como contraseña para el nuevo inicio de sesión.

Importante

Use siempre una contraseña segura.

Valores de código de retorno

0 (correcto) o 1 (erróneo).

Conjunto de resultados

Nombre de la columna Tipo de datos Descripción
UserName sysname Nombre del usuario de la base de datos.
UserSID varbinary(85) Identificador de seguridad del usuario.

Comentarios

Use sp_change_users_login para vincular un usuario de base de datos en la base de datos actual con un inicio de sesión de SQL Server. Si cambia el inicio de sesión de un usuario, use sp_change_users_login para vincular el usuario al nuevo inicio de sesión sin perder permisos de usuario. El nuevo @LoginName no puede ser say el @UserNamePattern no puede ser dbo, guestni un INFORMATION_SCHEMA usuario.

sp_change_users_login no se puede usar para asignar usuarios de base de datos a entidades de seguridad, certificados o claves asimétricas de nivel de Windows.

sp_change_users_login no se puede usar con un inicio de sesión de SQL Server creado a partir de una entidad de seguridad de Windows o con un usuario creado mediante CREATE USER WITHOUT LOGIN.

sp_change_users_login no se puede ejecutar dentro de una transacción definida por el usuario.

Permisos

Requiere pertenencia al rol fijo de base de datos db_owner. Solo los miembros del rol fijo de servidor sysadmin pueden especificar la Auto_Fix opción .

Ejemplos

Los ejemplos de código de Transact-SQL de este artículo utilizan la base de datos de ejemplo AdventureWorks2022 o AdventureWorksDW2022, que se pueden descargar desde la página principal de Ejemplos y proyectos de la comunidad de Microsoft SQL Server.

A Mostrar un informe del usuario actual para las asignaciones de inicio de sesión

El ejemplo siguiente produce un informe de los usuarios en la actual base de datos y sus identificadores de seguridad (SID).

EXEC sp_change_users_login 'Report';

B. Asignación de un usuario de base de datos a un nuevo inicio de sesión de SQL Server

En el ejemplo siguiente, un usuario de base de datos está asociado a un nuevo inicio de sesión de SQL Server. El usuario de la base de datos MB-Sales, que primero se asigna a otro inicio de sesión, se vuelve a asignar al inicio de sesión MaryB.

--Create the new login.
CREATE LOGIN MaryB WITH PASSWORD = '982734snfdHHkjj3';
GO
--Map database user MB-Sales to login MaryB.
USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Update_One', 'MB-Sales', 'MaryB';
GO

C. Asigne automáticamente un usuario a un inicio de sesión y cree un nuevo inicio de sesión si es necesario.

En el ejemplo siguiente se muestra cómo usar Auto_Fix para asignar un usuario existente a un inicio de sesión del mismo nombre o para crear el inicio de sesión Mary de SQL Server que es la contraseña B3r12-3x$098f6 si el inicio de sesión Mary no existe.

USE AdventureWorks2022;
GO
EXEC sp_change_users_login 'Auto_Fix', 'Mary', NULL, 'B3r12-3x$098f6';
GO