"Referencia no resuelta al usuario" después de importar como un proyecto VS DB

11

Acabo de importar una base de datos de producción SQL Server 2008r2 existente en un proyecto de base de datos VS 2013.

Ahora recibo varios errores en la línea de

Error       SQL71501: User: [mydbuser] has an unresolved reference to Login [mydbuser].

Realmente no necesito mi proyecto VS DB para administrar usuarios, pero me preocupa que intente eliminarlos al implementarlos si no estuvieran allí.

Los archivos mismos se generan como

CREATE USER [mydbuser] FOR LOGIN [mydbuser];

o

CREATE USER [mydomainuser] FOR LOGIN [MYDOMAIN\mydomainuser];

El marcador de error muestra que es específicamente para el inicio de sesión . Como se trata de un objeto a nivel de sistema, puedo entender que está fuera del alcance del proyecto db.

¿Es preferible que los cambie a todos?

CREATE USER [mydbuser] WITHOUT LOGIN;

o agregue la CREATE LOGINcláusula al comienzo de cada archivo?

Eliminar la referencia de inicio de sesión parece ser más simple y eliminar a los usuarios por completo sería lo más simple.

Quiero asegurarme de que estoy usando la herramienta de la manera prevista. ¿Habrá algún problema al volver a publicar alguno de los que vuelven a la producción? ¿Cuál es el procedimiento adecuado para agregar un usuario / inicio de sesión a través de un proyecto?

Greg
fuente
1
Acabo de notar que no sucedió para todos los usuarios. Todos eran usuarios de SQL, y algunos estaban deshabilitados (aunque otros no). ¿Alguna idea de dónde comenzar a buscar diferencias?
Greg

Respuestas:

9

La forma más fácil es no administrar usuarios a través de ssdt (la mayoría de las personas no lo hacen). Por lo tanto, puede eliminarlos y no implementar inicios de sesión o usuarios.

Hay tres formas:

  • Las nuevas opciones para ignorar usuarios / inicios de sesión
  • escribir un contribuyente de implementación para sacarlos
  • use mi contribuidor de implementación http://agilesqlclub.Codeplex.com

Ed

Ed Elliott
fuente
Su enlace aquí también fue bastante útil: blogs.msdn.com/b/ssdt/archive/2015/02/23/…
Greg
1
¿Podría por favor explicar "las nuevas opciones para ignorar usuarios / inicios de sesión"?
Yawar Murtaza
@YawarMurtaza dba.stackexchange.com/a/150092/117350
Douglas Gaskell el
9

Tuve el mismo problema y encontré este enlace

El usuario tiene una referencia no resuelta para Iniciar sesión

Si crea inicios de sesión específicos de la aplicación (que debería), se encontrará con este error cuando intente construir su solución. Para corregir este error, seleccione incluir los tipos de objeto 'Sin ámbito de aplicación' en las opciones (icono de engranaje en la parte superior) cuando realice una comparación de esquemas (haga clic con el botón derecho en el proyecto de base de datos para buscar Comparación de esquemas). A continuación, puede importar los inicios de sesión en su proyecto habitual y las referencias se ordenan. Nota: Si hace clic en la pestaña Tipos de objeto y cierra el cuadro de diálogo (lo que hizo por mí), use la tecla de tabulación hasta que se resalte Ámbito de aplicación, luego presione la flecha hacia abajo para resaltar Ámbito de no aplicación y presione el barra espaciadora Ahora debería poder hacer clic en Aceptar y ver los inicios de sesión.

SpeedOfSpin
fuente
1
¡Gracias por la respuesta! ¿Podría proporcionar algún contexto para estas instrucciones? Por ejemplo, ¿qué tiene que ver el esquema de comparación con este error? ¿Dónde está la pestaña Tipos de objeto? ¿Dónde presionas la tecla tab? Etc.
Jake
Por supuesto. Básicamente, en VS2013 / 2015 tiene su proyecto de base de datos que contiene todo su SQL para la solución que está utilizando. Si hace clic derecho en ese proyecto de base de datos y hace clic en "Comparación de esquemas", puede comparar lo que hay en su proyecto con lo que hay en su base de datos. En la parte superior de la ventana que aparece, hay un icono de Cog para la configuración. No puede hacer clic en la casilla de verificación "Sin ámbito de aplicación" con el mouse por alguna razón, así que use la tecla de tabulación en su lugar. Presione la tecla de tabulación una vez, luego la flecha hacia abajo y luego la barra espaciadora para seleccionarla. Espero que ayude.
SpeedOfSpin
1

Aparentemente, este problema todavía está ocurriendo en proyectos de bases de datos VS2017 también.

He logrado resolverlo creando primero el inicio de sesión y luego creando el usuario.

    -- Windows Account
    CREATE LOGIN [Domain\Username]
    FROM WINDOWS WITH DEFAULT_LANGUAGE = [us_english];

    GO

    CREATE USER [Domain\Username] FOR LOGIN [Domain\Username];
    GO

    -- Sql Acccount

    CREATE LOGIN [sql_account] WITH PASSWORD = 'Ch@ngeth1spA$swurD'
    GO

    CREATE USER [sql_account]
    FROM LOGIN [sql_account]
    WITH DEFAULT_SCHEMA = dbo

    GO


    -- Then set the sql file Build Action to "Build"
reas
fuente