„Ungelöster Verweis auf Benutzer“ nach dem Import als VS DB-Projekt
-
28-09-2020 - |
Frage
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 benötige mein VS DB-Projekt nicht wirklich zum Verwalten von Benutzern, befürchte jedoch, 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 das handelt Anmeldung.Da es sich um ein Objekt auf Systemebene handelt, kann ich verstehen, dass es außerhalb des Geltungsbereichs des Datenbankprojekts liegt.
Ist es vorzuziehen, dass ich sie alle ändere?
CREATE USER [mydbuser] WITHOUT LOGIN;
oder fügen Sie das hinzu CREATE LOGIN
Klausel am Anfang jeder Datei?
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 wie vorgesehen verwende.Wird es Probleme geben, einige davon wieder in Produktion zu bringen?Was ist das richtige Verfahren zum Hinzufügen eines Benutzers/Logins über ein Projekt?
Lösung
Der einfachste Weg besteht darin, 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 Deployment-Mitwirkenden, um sie herauszuholen
- Verwenden Sie meinen Bereitstellungsmitarbeiter http://agilesqlclub.Codeplex.com
Ed
Andere Tipps
Ich hatte das gleiche Problem und habe diesen Link gefunden
Der Benutzer hat einen ungelösten Verweis auf die Anmeldung
Wenn Sie anwendungsspezifische Anmeldungen erstellen (die Sie sollten), werden Sie auf diesen Fehler stoßen, wenn Sie versuchen, Ihre Lösung zu erstellen.Um diesen Fehler zu korrigieren, wählen Sie Objekttypen von "Nichtantrags-Scoped" in die Optionen (Getriebe Symbol oben), wenn Sie ein Schema-Vergleichen durchführen (klicken Sie mit der rechten Maustaste auf das Datenbankprojekt, um Schema-Vergleiche zu finden).Sie können dann die Anmeldungen einfach in Ihr reguläres Projekt importieren und die Referenzen werden sortiert.Notiz:Wenn Sie auf die Registerkarte "Objekttypen" klicken und das Dialog (das für mich getan hat) geschlossen wird, verwenden Sie stattdessen die Registerkarte, bis die Anwendungsbeschaffung hervorgehoben ist .Jetzt sollten Sie in der Lage sein, auf OK zu klicken und die Anmeldungen anzuzeigen.
Anscheinend tritt dieses Problem auch bei VS2017-Datenbankprojekten immer noch auf.
Ich habe es geschafft, das Problem 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"