En SQL Server, ¿cómo creo un inicio de sesión para un usuario existente?


17

Restablecí una base de datos de una instancia de SQL Server en una instancia diferente de SQL Server. La base de datos ya tiene usuarios agregados. Pero no tienen inicio de sesión para la nueva instancia de SQL Server.

Sé cómo crear nuevos inicios de sesión para nuevos usuarios, pero ¿cómo creo inicios de sesión para usuarios existentes?

Respuestas:


9

El problema es que la restauración recupera a los usuarios de db de la instancia del servidor original, pero la nueva instancia generalmente no sabe nada de los inicios de sesión de los usuarios. Los verá en Seguridad en el nivel de base de datos, pero no tienen los inicios de sesión de nivel de servidor correspondientes.

Debe volver a conectar los usuarios de la base de datos con los inicios de sesión del servidor en la instancia en la que restauró la base de datos.

Hay un par de formas de hacerlo:

  1. Cree nuevos inicios de sesión para ellos en la nueva instancia. Luego deberá eliminarlos como usuarios de la base de datos en la nueva instancia y agregar sus nuevos inicios de sesión. Esto parece extraño dado que puede crear los mismos nombres de inicio de sesión, pero los SID (identificadores de seguridad) serán diferentes y eso es lo que SQL usa para la identificación del usuario. Esto es lo suficientemente fácil para uno o dos inicios de sesión.

  2. Si desea mantener los mismos usuarios, manteniendo los mismos SID, en todas las instancias, utilice el procedimiento almacenado sp_help_revlogin . Copie el código del enlace que creará los procedimientos almacenados necesarios y ejecútelo en el servidor desde el que desea copiar los usuarios. Generará un script SQL que puede ejecutar en su servidor de destino para crear los mismos usuarios que transportan SID, contraseñas, todo. Este es el camino a seguir si tiene muchos usuarios de bases de datos que necesita volver a conectar en la instancia de destino o si no conoce las contraseñas de uno o más inicios de sesión de SQL en la instancia de origen.


10

Siempre ejecuto el comando sp_change_users_login con la acción 'Update_One' para volver a vincular al usuario de la base de datos con el inicio de sesión del servidor:

sp_change_users_login 'Update_One', 'database user', 'server login'


Genial, he usado esto: en su EXEC sp_change_users_login 'Auto_Fix', 'User', NULL, 'password';lugar. :)
user2173353

¿No es esto posible si tiene tanto el usuario de la base de datos como el inicio de sesión del servidor pero el enlace entre ellos está roto?
wenzzzel

2

Aquí está lo que encontré.

A medida que se expandió Squillman, los usuarios se copiaron con la base de datos, pero los inicios de sesión no. Hay un procedimiento de tienda llamado sp_change_users_login que puede usar para resolver el problema. Los pasos para hacerlo se detallan en este arco . Los detalles sobre el uso del procedimiento de la tienda se pueden encontrar en esta página .


2

A partir de SQL Server 2012, hay un comando T-SQL para asignar usuarios existentes a nuevos inicios de sesión. Cree el inicio de sesión, pero no intente hacer Asignaciones de usuarios (fallaría). Luego ejecuta:

use <existing_database>;
alter user <existing_database_user> with login = <newly_created_login>;

Esto asignará el inicio de sesión existente al nuevo usuario. Documentación de SQL aquí: https://docs.microsoft.com/en-us/sql/t-sql/statements/alter-user-transact-sql?view=sql-server-2017

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.