2012-09-04 28 views
14

Recientemente he actualizado mi entorno de desarrollo de SQL 2000 a SQL 2008 R2. Hice una copia de seguridad de nuestra producción db y la restauré a nuestro nuevo servidor de desarrollo.SQL asignar un inicio de sesión a un usuario existente

He creado un inicio de sesión en el servidor de desarrollo que refleja el inicio de sesión que uso en el servidor de producción, pero no puedo asignarlo al usuario 'dbo' en la base de datos. Cuando editar las propiedades de la entrada en 'Asignación de usuarios", sustituyo al usuario 'dbo', y me sale el siguiente error:?

TITLE: Microsoft SQL Server Management Studio Create failed for User 'dbo'. (Microsoft.SqlServer.Smo) An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo) User, group, or role 'dbo' already exists in the current database. (Microsoft SQL Server, Error: 15023)

Entonces, ¿cómo puedo asignar un inicio de sesión de un usuario existente

+6

Hay un comando [Alter user] (http://msdn.microsoft.com/en-us/library/ms176060.aspx): 'altera el usuario xyz con login = [dominio \ nombre de usuario]' –

+1

Borrar y volver a crear el usuario – Paparazzi

+0

Si la respuesta que proporcioné fue suficiente para resolver su problema, ¿le importaría marcarla como la solución correcta? Aquí hay un enlace a meta con más información. http://meta.stackexchange.com/a/5235/256426 – jwhaley58

Respuesta

12

fin de poder conciliar el usuario con el inicio de sesión, puede utilizado el procedimiento almacenado del sistema sp_change_users_login

sp_change_users_login [ @Action = ] 'action' 
[ , [ @UserNamePattern = ] 'user' ] 
[ , [ @LoginName = ] 'login' ] 
[ , [ @Password = ] 'password' ]; 

Por ejemplo:.

EXEC sp_change_users_login 'Update_One','User123','User123'

Si tiene muchos usuarios que no están sincronizados, puede usar un cursor para sacar a todos los usuarios y ejecutar este comando para ellos. No hay ningún efecto adverso para ejecutar esto en contra de los usuarios que no están desincronizados, y se solucionará a todos los usuarios huérfanos.

DECLARE @sql NVARCHAR(MAX); 
DECLARE curSQL CURSOR 
FOR 
     SELECT 'EXEC sp_change_users_login ''UPDATE_ONE'', ''' + name + ''', ''' + name + '''' 
     FROM  sysusers 
     WHERE issqluser = 1 
       AND name NOT IN ('guest', 'dbo', 'sys', 'INFORMATION_SCHEMA') 
OPEN curSQL 
FETCH curSQL INTO @sql 
WHILE @@FETCH_STATUS = 0 
    BEGIN 
      EXEC (
      @sql 
      ) 
      FETCH curSQL INTO @sql 
    END 
CLOSE curSQL 
DEALLOCATE curSQL 

esto se tiene que ejecutar el contexto de la base de datos que necesitan los usuarios fijan en.

+0

Olvidé mencionar que este es el resultado de tener usuarios que tienen SID que no están sincronizados. Experimenté este problema al restaurar una base de datos a un nuevo servidor donde creé un inicio de sesión que se llama igual que el servidor original, pero el SID que se genera será diferente, por lo que SQL Server no puede reconciliar al usuario con su iniciar sesión.Hay un componente en Integration Services capaz de solucionar este problema permanentemente, pero aprende de mi dolor de corazón, deshabilita al usuario y sobrescribe la contraseña. – jwhaley58

+0

Cuando ejecuto su consulta obtengo: Debe declarar la variable escalar "@sql". – YesMan85

+0

No puedo creer que esto haya durado tanto sin ser atrapado. Lo siento por eso. Solo necesita esa variable para ser declarada. Lo agregué al guion. – jwhaley58

8

creo que el comentario de Nikola Markovinović a este post necesita ser añadido como una respuesta. Utilice el comando de usuario Alter:

USE {database}; 
ALTER USER {user} WITH login = {login} 

Dónde:

  • {base}: La base de datos que contiene el usuario huérfano
  • {usuario}: El nombre de usuario huérfano
  • {login}: El nombre de inicio de sesión. Se puede utilizar el mismo nombre de usuario tal como se utiliza en el servidor antiguo o un mapa al usuario un nombre de usuario diferente

me encontré con esta respuesta al http://www.aip.im/2010/05/re-map-database-user-to-login-in-sql-server-after-restoring-or-attaching-database/#sthash.fbazv94Z.dpuf

0

En SQL Server 2012, el usuario 'dbo' no puede ser alterado .

Cuestiones relacionadas