web-dev-qa-db-ja.com

Visual Studio2010-データベースがインポートされたデータベースプロジェクトのビルドに失敗する

私はVS2010のデータベースプロジェクトを見ています。データベーススキーマ(ソース管理内)を追跡し、「新規インストール」スクリプトを生成し、スクリプトを変更するために使用できるものが必要だという考えです。

新しいデータベースプロジェクトウィザードを作成して既存のデータベーススキーマをインポートすると、「ビルド」されません。エラーが発生します:

SQL03006:ユーザー:[スキャナー]にログイン[スキャナー]への未解決の参照があります。

このエラーを生成するSQL:

CREATE USER [scanner] FOR LOGIN [scanner];

ユーザー「スキャナー」は、インポートしたデータベースで定義されたログインです。私はそれが私に何を言っているのか分かりません、そしてグーグルはあまり投げ出していません。何か案は?

24
Matt Roberts

ログインは、実際にはサーバーインストールのマスターデータベースで定義されています。 CREATE USERステートメントは、既存のログインを指す必要があります。そうでない場合、エラーが発生します。データベースプロジェクトは、サーバーレベルでのログインを認識していません。ログインを処理するサーバープロジェクトを作成するか、データベースプロジェクトのセキュリティオブジェクトのチェックをオフにすることができます。詳細については、Demetri Mによる回答を参照してください。 http://social.msdn.Microsoft.com/Forums/eu/vstsdb/thread/1f8226fe-b791-4344-8735-3d38307e8664

16
Judah Sali

SQL Server 2008R2データベースプロジェクトにVisualStudio2012を使用しています。 @Judahによってリストされたオプションは、もう機能していないようです。

これらは、スキーマ比較の実行中に構成した設定のように見えます。

データベースプロジェクトを右クリック> [スキーマ比較]を選択> [設定]歯車アイコンを選択> [オブジェクトタイプ]タブを選択>

ログインはアプリケーションスコープではありません。データベースの役割、権限、役割のメンバーシップ、およびユーザーはすべてアプリケーションスコープです。

残念ながら、これらを保持するために私が見つけることができる唯一の方法は、スキーマ比較を保存することです。これをチームで共有していて、スキーマ比較のプロジェクト/データベース(またはサーバー)設定が必要な場合、これは少し不便になる可能性があります。

しかし、それは仕事を成し遂げます。

9
fordareh

ユーザー作成スクリプトを変更して、ロールを作成できます。したがって、「ログインloginNameのユーザーuserNameを作成する」の代わりに;

「ロール[ユーザー名]認証dboの作成」を使用します。

これはハックですが、プロジェクト内のユーザーや役割に対処する必要がない限り、次のことを喜んで行うことができます。

GRANT EXECUTE ON OBJECT :: [dbo]。[sp_name] TO [userName];

2
Paul

どうやら、この問題は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"
0
reas