2010-10-18 10 views
7

Estoy intentando restaurar una base de datos (SQL Server 2008) a partir de una copia de seguridad en un servidor diferente. El problema que tengo es con el inicio de sesión, ya que el usuario está incluido en la copia de seguridad, pero el inicio de sesión no.restaurar la base de datos de error de inicio de sesión de usuario

así que trato de crear un nuevo inicio de sesión en el servidor pero tampoco parece funcionar.

alguien conoce una solución para esto?

Respuesta

2

Hubiera sido útil si usted envió el mensaje de error real y las medidas adoptadas para producir el error.

De todos modos, creo que lo que hay que hacer es eliminar el usuario de la base de datos restaurada. A continuación, podrá configurar desde cero el usuario & correspondiente al inicio de sesión del servidor.

EDIT:

Si el usuario posee un esquema en la base de datos que no será capaz de eliminar el usuario. There is Microsoft article on how to transfer SQL Logins.

+0

bien, he conseguido quitar el usuario cambiando el esquema. Así que agregué un nuevo nombre de usuario y usuario, pero igual recibo el mismo error: Detalles de la Excepción: System.Data.SqlClient.SqlException: Falló el inicio de sesión para el usuario 'xx'. – user441365

+0

Comprobé en el visor de eventos y el evento de error: 1309 – user441365

+0

@ user441365 - Consulte este enlace aquí para obtener más detalles sobre este error. ¿Cuál es el estado? http://msdn.microsoft.com/en-us/library/ms366351.aspx – codingbadger

14

Eso es un problema muy común después de una restauración. Un usuario (base de datos específica) y un inicio de sesión (todo el servidor) tienen un SID. El problema probablemente sea que el inicio de sesión que creó tiene un SID diferente del inicio de sesión en la base de datos de producción. Puede comprobar el inicio de sesión y el SID de usuario como:

select UserSid from sysusers where name = 'UserName' 
select LoginSid from master.dbo.syslogins where name = 'UserName' 

Aquí es una secuencia de comandos se corre después de cada copia de seguridad para reparar el inicio de sesión - enlace de base de datos:

declare user_cursor cursor forward_only read_only for 
    SELECT distinct u.name 
    FROM sysusers u 
    JOIN master.dbo.syslogins l ON u.name = l.name 
    WHERE u.issqluser <> 0 
declare @user sysname; 

open user_cursor 
fetch next from user_cursor into @user; 

while @@fetch_status = 0 
    begin 
    if @user <> 'dbo' 
     begin 
     print '' 
     print 'Updating user "' + @user + '"' 
     exec sp_change_users_login 'Auto_Fix', @user 
     end 
    fetch next from user_cursor into @user 
    end; 

close user_cursor 
deallocate user_cursor 
+0

¡Funcionó como un amuleto, gracias! Este script me ahorra horas de tiempo perdido ... – DaveN59

13

No estoy 100% seguro de la causa de su error, pero este guión me ayuda a la hora de restaurar una base de datos de otro servidor, suponiendo que el usuario y el usuario ya existe en el servidor de destino:

EXEC sp_change_users_login UPDATE_ONE, '[username]', '[loginname]' 

(Sustituto [nombre de usuario] con su base de datos de nombre de usuario una nd [loginname] con el inicio de sesión del servidor)

-1

No pude hacer ningún comentario sobre la publicación anterior, pero funcionó, la única enmienda que tuve que hacer fue a LINE 4 donde especifiqué la clasificación predeterminada en el campo.

JOIN master.dbo.syslogins l ON u.name COLLATE DATABASE_DEFAULT = l.name COLLATE DATABASE_DEFAULT 
Cuestiones relacionadas