„Nierozwiązane odniesienie do użytkownika” po zaimportowaniu jako projekt VS DB

11

Właśnie zaimportowałem istniejącą produkcyjną bazę danych SQL Server 2008r2 do projektu bazy danych VS 2013.

Otrzymuję teraz szereg błędów wzdłuż linii

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

Tak naprawdę nie potrzebuję mojego projektu VS DB do zarządzania użytkownikami, ale obawiam się, że spróbowałbym je usunąć po wdrożeniu, gdyby ich nie było.

Same pliki są generowane jako

CREATE USER [mydbuser] FOR LOGIN [mydbuser];

lub

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

Znacznik błędu pokazuje, że jest on przeznaczony specjalnie do logowania . Ponieważ jest to obiekt na poziomie systemu, rozumiem, że jest poza zakresem projektu db.

Czy wolę, aby zmienić je wszystkie na

CREATE USER [mydbuser] WITHOUT LOGIN;

lub dodać CREATE LOGINklauzulę na początku każdego pliku?

Usunięcie odniesienia do logowania wydaje się prostsze, a usunięcie użytkowników byłoby najprostsze.

Chcę się upewnić, że używam tego narzędzia zgodnie z jego przeznaczeniem. Czy będą jakieś problemy z ponownym opublikowaniem któregokolwiek z nich z powrotem do produkcji? Jaka jest właściwa procedura dodawania użytkownika / loginu poprzez projekt?

Greg
źródło
1
Właśnie zauważyłem, że nie zdarzyło się to wszystkim użytkownikom. Wszyscy oni byli użytkownikami SQL, a niektórzy zostali wyłączeni (choć inni nie). Jakieś pomysły, od czego zacząć szukać różnic?
Greg,

Odpowiedzi:

9

Najprościej jest nie zarządzać użytkownikami przez ssdt (większość ludzi tego nie robi). Możesz więc po prostu je usunąć i nie wdrażać loginów ani użytkowników.

Istnieją trzy sposoby:

  • nowe opcje ignorowania użytkowników / loginów
  • Napisz współautora wdrażania, aby je wyciągnąć
  • użyj mojego współautora wdrażania http://agilesqlclub.Codeplex.com

Ed

Ed Elliott
źródło
Twój link tutaj był również bardzo pomocny: blogs.msdn.com/b/ssdt/archive/2015/02/23/…
Greg
1
Czy mógłbyś rozwinąć „nowe opcje ignorowania użytkowników / loginów”?
Yawar Murtaza
@YawarMurtaza dba.stackexchange.com/a/150092/117350
Douglas Gaskell
9

Miałem ten sam problem i znalazłem ten link

Użytkownik ma nierozwiązane odniesienie do logowania

Jeśli utworzysz loginy aplikacji (które powinieneś), napotkasz ten błąd podczas próby zbudowania rozwiązania. Aby skorygować ten błąd, zaznacz opcje obiektów „Nieobjęte zakresem zastosowania” w opcjach (ikona koła zębatego u góry) podczas porównywania schematu (kliknij projekt bazy danych prawym przyciskiem myszy, aby znaleźć porównanie schematu). Następnie możesz po prostu zaimportować dane logowania do swojego zwykłego projektu, a referencje zostaną posortowane. Uwaga: jeśli klikniesz kartę Typy obiektów i zamkniesz okno dialogowe (co zrobiłem dla mnie), zamiast tego używaj klawisza tab, aż podświetli się Zakres aplikacji, a następnie naciśnij strzałkę w dół, aby podświetlić Zakres nieobjęty aplikacją, i naciśnij klawisz spacja. Teraz powinieneś być w stanie kliknąć OK i zobaczyć loginy.

SpeedOfSpin
źródło
1
Dziękuję za odpowiedź! Czy możesz podać kontekst dla tych instrukcji? Na przykład, co ma związek ze schematem z tym błędem? Gdzie jest karta Typy obiektów? Gdzie naciskasz klawisz Tab? Itd.
Jake,
Pewnie. Zasadniczo w VS2013 / 2015 masz projekt bazy danych, który zawiera cały kod SQL dla używanego rozwiązania. Jeśli klikniesz prawym przyciskiem myszy ten projekt DB i klikniesz „Schema Compare”, możesz porównać zawartość twojego projektu z zawartością bazy danych. W górnej części okna, które się pojawi, znajduje się ikona koła zębatego dla ustawień. Z jakiegoś powodu nie możesz kliknąć myszką pola wyboru „Nieobjęte zakresem zastosowania”, więc zamiast tego użyj klawisza Tab. Naciśnij jeden raz klawisz tab, następnie klawisz strzałki w dół, a następnie spację, aby go wybrać. Mam nadzieję, że to pomaga.
SpeedOfSpin
1

Najwyraźniej ten problem występuje również w projektach baz danych VS2017.

Udało mi się to rozwiązać, najpierw tworząc login, a następnie użytkownika.

    -- 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
źródło