"Riferimento non risolto all'utente" dopo l'importazione come progetto VS DB


11

Ho appena importato un database di produzione esistente di SQL Server 2008r2 in un progetto di database VS 2013.

Ora ricevo un numero di errori sulla falsariga di

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

Non ho davvero bisogno del mio progetto VS DB per gestire gli utenti, ma temo che proverebbe a rimuoverli dopo la distribuzione se non ci fossero.

I file stessi vengono generati come

CREATE USER [mydbuser] FOR LOGIN [mydbuser];

o

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

Il marcatore di errore mostra che è specifico per l' accesso . Trattandosi di un oggetto a livello di sistema, posso capire che è al di fuori dell'ambito del progetto db.

È preferito che li cambi tutti

CREATE USER [mydbuser] WITHOUT LOGIN;

o aggiungi la CREATE LOGINclausola all'inizio di ogni file?

Rimuovere il riferimento al login sembra essere più semplice e rimuovere del tutto gli utenti sarebbe il più semplice.

Voglio assicurarmi di utilizzare lo strumento nel modo previsto. Ci saranno problemi nel ripubblicare qualcuno di quelli di nuovo in produzione? Qual è la procedura corretta per aggiungere un utente / login tramite un progetto?


1
Ho appena notato che non è successo per tutti gli utenti. Tutti erano utenti SQL e alcuni erano disabilitati (anche se altri no). Qualche idea da dove iniziare a cercare differenze?
Greg,

Risposte:


9

Il modo più semplice è non gestire gli utenti tramite ssdt (la maggior parte delle persone non lo fa). Quindi puoi semplicemente rimuoverli e non distribuire accessi o utenti.

Ci sono tre modi:

  • le nuove opzioni per ignorare utenti / accessi
  • scrivere un collaboratore alla distribuzione per estrarlo
  • usa il mio collaboratore alla distribuzione http://agilesqlclub.Codeplex.com

Ed


Anche il tuo link qui è stato molto utile: blogs.msdn.com/b/ssdt/archive/2015/02/23/…
Greg

1
Potresti per favore approfondire "le nuove opzioni per ignorare utenti / accessi"?
Yawar Murtaza,


9

Ho avuto lo stesso problema e ho trovato questo link

L'utente ha un riferimento non risolto all'accesso

Se si creano accessi specifici dell'applicazione (che è necessario), si verificherà questo errore quando si tenta di creare la soluzione. Per correggere questo errore, selezionare Includi tipi di oggetto "Non per applicazione" nelle opzioni (icona a forma di ingranaggio in alto) quando si esegue un confronto di schemi (fare clic con il pulsante destro del mouse sul progetto del database per trovare Schema Compare). Puoi quindi importare gli accessi nel tuo normale progetto e i riferimenti vengono ordinati. Nota: se si fa clic sulla scheda Tipi di oggetto e si chiude la finestra di dialogo (cosa che ha fatto per me), utilizzare invece il tasto Tab fino a evidenziare Ambito applicazione, quindi premere la freccia giù per evidenziare Non ambito applicazione e premere il barra spaziatrice. Ora dovresti essere in grado di fare clic su OK e vedere gli accessi.


1
Grazie per la risposta! Potresti fornire un contesto per queste istruzioni? Ad esempio, cosa c'entra il confronto dello schema con questo errore? Dov'è la scheda Tipi di oggetti? Dove premi il tasto Tab? Ecc.
Jake,

Sicuro. Fondamentalmente in VS2013 / 2015 hai il tuo progetto di database che contiene tutto il tuo SQL per la soluzione che stai usando. Se fai clic destro su quel progetto DB e fai clic su "Schema Compare" puoi confrontare ciò che è nel tuo progetto con ciò che è nel tuo database. Nella parte superiore della finestra che si apre è presente un'icona a forma di ingranaggio per le impostazioni. Non puoi fare clic sulla casella di controllo "Non applicativo" con il mouse per qualche motivo, quindi usa invece il tasto tab. Premi una volta il tasto Tab, poi il tasto freccia giù e poi la barra spaziatrice per selezionarlo. Spero che aiuti.
SpeedOfSpin

1

Apparentemente, questo problema si verifica ancora anche nei progetti di database VS2017.

Sono riuscito a risolverlo creando prima il login e quindi creare l'utente.

    -- 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"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.