web-dev-qa-db-ja.com

VS DBプロジェクトとしてインポートした後の「ユーザーへの未解決の参照」

既存のSQL Server 2008r2運用データベースをVS 2013データベースプロジェクトにインポートしました。

私は今の線に沿っていくつかのエラーを取得します

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

ユーザーを管理するためにVS DBプロジェクトは本当に必要ありませんが、ユーザーがそこにいない場合、展開時にそれらを削除しようとするのではないかと心配しています。

ファイル自体は次のように生成されます

CREATE USER [mydbuser] FOR LOGIN [mydbuser];

または

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

エラーマーカーは、それがLogin専用であることを示しています。これはシステムレベルのオブジェクトなので、dbプロジェクトのスコープ外であることは理解できます。

すべてを次のように変更することが好ましいですか?

CREATE USER [mydbuser] WITHOUT LOGIN;

またはCREATE LOGIN句を各ファイルの先頭に追加しますか?

ログイン参照を削除する方が簡単で、ユーザーを完全に削除する方が簡単です。

ツールが意図したとおりに使用されていることを確認したいと思います。それらのいずれかを本番環境に再公開する際に問題はありますか?プロジェクトを介してユーザー/ログインを追加する適切な手順は何ですか?

11
Greg

最も簡単な方法は、ssdtを介してユーザーを管理しないことです(ほとんどの人は管理しません)。したがって、それらを削除して、ログインやユーザーをデプロイしないでください。

3つの方法があります。

  • ユーザー/ログインを無視する新しいオプション
  • それらを引き出すためのデプロイメント・コントリビューターを作成する
  • 展開の貢献者を使用する http://agilesqlclub.Codeplex.com

エド

8
Ed Elliott

私は同じ問題を抱えており、このリンクを見つけました

ユーザーにログインへの未解決の参照があります

アプリケーション固有のログインを作成すると(必要です)、ソリューションを構築しようとすると、このエラーが発生します。このエラーを修正するには、スキーマ比較(データベースプロジェクトを右クリックしてスキーマ比較を検索)するときに、オプション(上部の歯車のアイコン)で[アプリケーションスコープ以外のオブジェクトタイプを含める]を選択します。その後、ログインを通常のプロジェクトにインポートするだけで、参照がソートされます。注:[オブジェクトタイプ]タブをクリックしてダイアログが閉じた場合は(ダイアログボックスが閉じました)、アプリケーションスコープが強調表示されるまでタブキーを使用してから、下矢印を押して[アプリケーションスコープ以外]を強調表示し、スペースキー。これで、[OK]をクリックしてログインを確認できます。

9
SpeedOfSpin

どうやら、この問題はVS2017データベースプロジェクトでもまだ発生しています。

最初にログインを作成し、次にユーザーを作成することで解決できました。

    -- 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"
1
reas