"Ungelöster Verweis auf Benutzer" nach dem Import als VS DB-Projekt

11

Ich habe gerade eine vorhandene SQL Server 2008r2-Produktionsdatenbank in ein VS 2013-Datenbankprojekt importiert.

Ich bekomme jetzt eine Reihe von Fehlern in der Art von

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

Ich brauche mein VS DB-Projekt nicht wirklich, um Benutzer zu verwalten, aber ich befürchte, dass es versuchen würde, sie bei der Bereitstellung zu entfernen, wenn sie nicht vorhanden wären.

Die Dateien selbst werden als generiert

CREATE USER [mydbuser] FOR LOGIN [mydbuser];

oder

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

Die Fehlermarkierung zeigt an, dass es sich speziell um die Anmeldung handelt . Da dies ein Objekt auf Systemebene ist, kann ich verstehen, dass es außerhalb des Bereichs des Datenbankprojekts liegt.

Ist es vorzuziehen, dass ich sie alle ändere?

CREATE USER [mydbuser] WITHOUT LOGIN;

oder die CREATE LOGINKlausel am Anfang jeder Datei hinzufügen ?

Das Entfernen der Anmeldereferenz scheint einfacher zu sein, und das Entfernen der Benutzer insgesamt wäre am einfachsten.

Ich möchte sicherstellen, dass ich das Tool so verwende, wie es beabsichtigt war. Wird es Probleme geben, diese wieder in die Produktion zu bringen? Wie wird ein Benutzer / Login über ein Projekt hinzugefügt?

Greg
quelle
1
Mir ist gerade aufgefallen, dass dies nicht bei allen Benutzern der Fall war. Sie alle waren zufällig SQL-Benutzer, und einige waren deaktiviert (andere jedoch nicht). Irgendwelche Ideen, wo man nach Unterschieden suchen kann?
Greg

Antworten:

8

Der einfachste Weg ist, Benutzer nicht über ssdt zu verwalten (die meisten Leute tun dies nicht). Sie können sie also einfach entfernen und keine Anmeldungen oder Benutzer bereitstellen.

Es gibt drei Möglichkeiten:

  • die neuen Optionen zum Ignorieren von Benutzern / Anmeldungen
  • Schreiben Sie einen Bereitstellungsbeitrag, um sie herauszuziehen
  • Verwenden Sie meinen Bereitstellungsbeitrag http://agilesqlclub.Codeplex.com

Ed

Ed Elliott
quelle
Ihr Link hier war auch sehr hilfreich: blogs.msdn.com/b/ssdt/archive/2015/02/23/…
Greg
1
Könnten Sie bitte "die neuen Optionen zum Ignorieren von Benutzern / Anmeldungen" erläutern?
Yawar Murtaza
@ YawarMurtaza dba.stackexchange.com/a/150092/117350
Douglas Gaskell
9

Ich hatte das gleiche Problem und fand diesen Link

Der Benutzer hat einen ungelösten Verweis auf Login

Wenn Sie anwendungsspezifische Anmeldungen erstellen (die Sie sollten), wird dieser Fehler beim Erstellen Ihrer Lösung auftreten. Um diesen Fehler zu beheben, wählen Sie bei einem Schema-Vergleich Objekttypen ohne Anwendungsbereich in die Optionen ein (Zahnradsymbol oben) (klicken Sie mit der rechten Maustaste auf das Datenbankprojekt, um Schema Compare zu finden). Sie können dann einfach die Anmeldungen in Ihr reguläres Projekt importieren und die Referenzen werden sortiert. Hinweis: Wenn Sie auf die Registerkarte Objekttypen klicken und das Dialogfeld schließen (was für mich der Fall war), verwenden Sie stattdessen die Tabulatortaste, bis Anwendungsbereich hervorgehoben ist. Drücken Sie dann den Abwärtspfeil, um Nicht-Anwendungsbereich hervorzuheben, und drücken Sie die Taste Leertaste. Jetzt sollten Sie in der Lage sein, auf OK zu klicken und die Anmeldungen anzuzeigen.

SpeedOfSpin
quelle
1
Danke für die Antwort! Könnten Sie einen Kontext für diese Anweisungen angeben? Was hat beispielsweise der Schemavergleich mit diesem Fehler zu tun? Wo befindet sich die Registerkarte Objekttypen? Wo drückst du die Tabulatortaste? Usw.
Jake
Sicher. Grundsätzlich haben Sie in VS2013 / 2015 Ihr Datenbankprojekt, das Ihr gesamtes SQL für die von Ihnen verwendete Lösung enthält. Wenn Sie mit der rechten Maustaste auf dieses DB-Projekt klicken und auf "Schema Compare" klicken, können Sie die Inhalte in Ihrem Projekt mit den Daten in Ihrer Datenbank vergleichen. Oben im angezeigten Fenster befindet sich ein Zahnradsymbol für die Einstellungen. Sie können aus irgendeinem Grund nicht mit der Maus auf das Kontrollkästchen "Nicht anwendungsbezogen" klicken. Verwenden Sie stattdessen die Tabulatortaste. Drücken Sie einmal die Tabulatortaste, dann die Pfeiltaste nach unten und dann die Leertaste, um sie auszuwählen. Ich hoffe, das hilft.
SpeedOfSpin
1

Anscheinend tritt dieses Problem auch bei VS2017-Datenbankprojekten immer noch auf.

Ich habe es geschafft, es zu lösen, indem ich zuerst den Login und dann den Benutzer erstellt habe.

    -- 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"
Gründe
quelle