Error de SQL Server 2008 R2: 15023, usuario, grupo o rol ya existe


16

Tengo una base de datos de prueba con la que tengo problemas de permisos.
No puedo acceder a la base de datos de informes, y la documentación de ayuda de la aplicación dice que haga lo siguiente:

Resolution: 

1. Launch the SQL Server Management Studio and connect to the database server(s) hosting   the Vision and Reporting Server databases. 
2. Expand the security folder. 
3. Select logins and right click on the <username> user and choose properties. 
4. Click the User Mapping tab 
5.Make sure the following databases are selected in the Users mapped to this Login:

    ReportServer
    ReportServerTempDB
    Your Vision databases
    This maps the login/user to the respective databases.
6. As you select each database (including your Vision database), select the db_owner role in the Database role membership for: section. You must select this option for each database.

Cuando hago esto, aparece el siguiente error:

"Create failed for user '<servername>\<username>'.  User, group, or role '<servername>\<username>' already exists in the current database. (Microsoft SQL Server, Error: 15023)"

Busqué en Google este error y probé el siguiente comando en cada base de datos:

 ALTER USER [<username>] WITH LOGIN = [<username>] 

El mensaje indicaba que los comandos se completaron con éxito, pero todavía recibo el error anterior cuando intento asignar cada base de datos como se indicó anteriormente.

¿Qué me estoy perdiendo?

Según el comentario de Kin (gracias) Intenté esto: - Hice clic con el botón derecho en el usuario y seleccioné: Inicio de sesión de script como> Soltar y crear en> Nueva ventana de consulta. - Ejecuté la consulta resultante e intenté asignar los roles de usuario seleccionando las otras dos bases de datos y db_owner nuevamente, pero sigo recibiendo el mismo mensaje de error que el anterior.

Pensamientos ??

Respuestas:


12

Hay varias cosas que puede probar, y el éxito de cada una probablemente dependerá de la función del servidor que tenga.

Para empezar, si solo se trata de uno o dos usuarios, honestamente, la forma más fácil es eliminar al usuario de la base de datos de la base de datos restaurada, y siempre que haya un inicio de sesión en el servidor existente, vuelva a asignar el usuario de la base de datos al inicio de sesión del servidor utilizando SSMS. Si el inicio de sesión del servidor no existe, simplemente créelo, asigne al usuario y ¡listo! Vamos lejos.

Siguiente opción: si está migrando una gran cantidad de usuarios, use sp_help_revlogin. sp_help_revlogin es un procedimiento almacenado proporcionado por Microsoft que ayudará a migrar inicios de sesión de un servidor a otro, incluidas las contraseñas y los SID. Aquí hay un buen artículo al respecto SP_HELP_REVLOGIN


Consulte support.microsoft.com/en-us/kb/918992 Cómo transferir inicios de sesión y contraseñas entre instancias de SQL Server
James Jenkins

3

Utilizo Auto_Fix con sp_change_users_loginen mi entorno de desarrollo para solucionar estos problemas (Error 15023). Evite usar Auto_Fix en situaciones sensibles a la seguridad.

Auto_Fix: vincula una entrada de usuario en la vista de catálogo del sistema sys.database_principals en la base de datos actual a un inicio de sesión de SQL Server del mismo nombre. Si no existe un inicio de sesión con el mismo nombre, se creará uno. Examine el resultado de la instrucción Auto_Fix para confirmar que el enlace correcto está hecho. Evite usar Auto_Fix en situaciones sensibles a la seguridad.

sp_change_users_login 'AUTO_FIX', 'myuser'

Además, tenga en cuenta que esta característica puede eliminarse en una versión futura de Microsoft SQL Server.

Otras referencias:

  1. El usuario, grupo o rol de SQL Server 2008 ya existe en la base de datos actual
  2. REVISIÓN: Error 15023: el usuario ya existe en la base de datos actual
  3. SQL asigna un inicio de sesión a un usuario existente

0
ALTER USER [<username>] WITH LOGIN=[<username>]

Es el enfoque correcto.

De lo contrario, vaya a:

Seguridad> Inicios de sesión> (su nombre de usuario)> Propiedades> Asignación de usuario

ingrese la descripción de la imagen aquí

y vuelva a asignar ese usuario a la base de datos que desee.

Puede usar la siguiente consulta en el contexto de su base de datos para verificar si hay huérfanos:

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name

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.