24

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

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

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

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

CREATE USER [scanner] FOR LOGIN [scanner];

ユーザー「scanner」は、インポートしたデータベースで定義されたログインです。私はそれが私に何を伝えているのか分かりません、そしてグーグルはあまり吐き出していません. 何か案は?

4

4 に答える 4

17

ログインは、サーバー インストールのマスター データベースで実際に定義されます。CREATE USER ステートメントは、既存のログインを指す必要があります。そうしないと、エラーになります。データベース プロジェクトは、サーバー レベルでのログインを認識しません。ログインを処理するサーバー プロジェクトを作成するか、データベース プロジェクトでセキュリティ オブジェクトのチェックをオフにすることができます。詳細については、Demetri M による回答を参照してください。

于 2011-03-29T16:53:34.937 に答える
9

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

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

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

ログインは、アプリケーション スコープではありません。データベース ロール、アクセス許可、ロール メンバーシップ、およびユーザーはすべてアプリケーション スコープです。

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

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

于 2013-02-27T08:37:07.773 に答える
2

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

「Create Role [userName] authorization dbo;」を使用します。

これはハックですが、プロジェクトでユーザーとロールを処理する必要がない限り、次のことを喜んで実行できます。

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

于 2015-09-02T15:49:46.493 に答える