Ocasionalmente muevo una base de datos (SQL Express 2012) de una máquina de desarrollo a un servidor, o viceversa, usando la copia de seguridad y restauración de la base de datos en SQL Server Management Studio.
Cada vez que hago esto, las aplicaciones en la máquina de destino no pueden acceder a la base de datos hasta que elimine el usuario que usan, "george", de los usuarios de la base de datos (Base de datos, Seguridad, Usuarios en SQL Server Management Studio), y lo vuelvo a agregar como propietario bajo Seguridad, Inicios de sesión, george / properties, mapeo de usuarios.
¿Hay una mejor manera de hacer esto? Parece un poco complicado.
sql-server
backup
xpda
fuente
fuente
CREATE LOGIN
declaración.Respuestas:
Esta es la diferencia entre los inicios de sesión y los usuarios y cómo se relacionan entre sí:
Lo que sucede comúnmente con los inicios de sesión autenticados de SQL y los usuarios de la base de datos en una restauración es que el SIDS no estará sincronizado, rompiendo así la relación. Esta relación debe repararse antes de que pueda conectarse a la base de datos utilizando ese inicio de sesión, porque a los ojos de SQL Server esos principios ya no están conectados. Puede solucionar esto con el siguiente SQL:
Puede usar la siguiente consulta en el contexto de su base de datos para verificar si hay huérfanos:
fuente
Podrías considerar cambiar la base de datos a una base de datos contenida . Los usuarios de la base de datos contenidos son autenticados por la base de datos, no a nivel de instancia a través del inicio de sesión. Hace que mover la base de datos a una instancia diferente sea más simple.
De lo contrario, puede hacer una copia de seguridad de la información de inicio de sesión utilizando los scripts sp_help_revlogin proporcionados en este KB de soporte de Microsoft . Y ejecute el script de salida en la nueva instancia.
fuente
Utilizo el siguiente script para migrar / crear las cuentas de usuario y los inicios de sesión. Ejecútelo desde el servidor en el que ha restaurado la base de datos y proporcione el nombre del servidor original como parámetro del procedimiento.
No tomo ningún crédito por el procedimiento, ya que lo obtuve de otro lado, pero funciona bien.
fuente
Aquí hay una solución que funcionó para mí. Lo que hace es:
EXEC sp_change_users_login 'REPORT'
EXEC sp_change_users_login 'UPDATE_ONE','<userName>','<userName>'
fuente
Siempre puede intentar volver a vincular a todos los usuarios de la base de datos a inicios de sesión con nombres similares en el servidor de la base de datos.
fuente
Pensé que valía la pena señalar esta simple solución al problema de los carteles. Este es el script que ejecuto en SQL Server 2008 cuando restauro una base de datos de producción de un servidor a la base de datos de desarrollo / prueba en otro servidor CUANDO el nombre de usuario está en Seguridad> Usuarios de la base de datos PERO
'login name'
falta en la propiedad de los usuarios en el Pestaña General:Referencia de MSDN aquí Tenga en cuenta que el artículo recomienda utilizar ALTER USER en su lugar para las versiones más recientes de SQL.
fuente