0

既存の製品で VS2012 データベース プロジェクトを立ち上げて実行しようとしています。データベースをスキーマ比較して、新しいデータベース プロジェクトにデータを入力したところ、すべて問題ないように見えました。Visual Studio で正常にデプロイされているように見えますが、エラーはありませんが、新しくデプロイしたデータベースに対してアプリを実行しようとすると、次のエラーが発生します。

ログインで要求されたデータベース "my_database" を開けません。ログインに失敗しました。

これを広範囲に調べたところ、理解できない奇妙な動作が見つかりました。データベースをデプロイした後に次の sql を実行すると、すべてが機能し始めます。

DROP SCHEMA [my_app_user] 
GO
DROP USER [my_app_user] 
GO
CREATE SCHEMA [my_app_user]
GO
CREATE USER [my_app_user] FOR LOGIN [my_app_user] WITH DEFAULT_SCHEMA=[my_app_user]
GO
ALTER ROLE [my_app_role] ADD MEMBER [my_app_user];
GO

奇妙なことに、このコードは私のデータベース プロジェクトにもあり、ドロップ ステートメントを除いて表示されているとおりです。展開するとこれらすべてが作成されますが、機能しません。別の奇妙な動作は、Sql Server Management Studio 2012 でユーザーのログインを開いて、ログインのユーザー マッピングを確認すると、マップされていないことです。データベースのチェックボックスをオンにすると、すべて問題ないように見えますが、[OK] をクリックして同じウィンドウに戻ると、再びチェックされません。上記のスクリプトを実行すると、[ユーザー マッピング] ウィンドウの見栄えが良くなります。

更新: login/schema/user の create ステートメントと role の alter ステートメントを、データベース プロジェクトで使用される配置後のスクリプトに移動したところ、問題なくデータベースに公開されました。ただし、データベース プロジェクトは、展開後とは対照的に、これらのステートメントをスキーマの残りの部分に入れたいと考えているようです。

ここで何が起こっていますか? これを修正するにはどうすればよいですか? 助けてくれてありがとう!!

4

2 に答える 2

0

これは権限の問題のようです。データベースが配置されているセキュリティ コンテキストには、この SQL ステートメントを実行する権限がありますか?

DROP SCHEMA [my_app_user] 
GO
DROP USER [my_app_user] 
GO
CREATE SCHEMA [my_app_user]
GO
CREATE USER [my_app_user] FOR LOGIN [my_app_user] WITH DEFAULT_SCHEMA=[my_app_user]
GO
ALTER ROLE [my_app_role] ADD MEMBER [my_app_user];
GO

データベースが展開されている時点の SQL Server ログを確認し、展開を行うボックスのアプリケーション ログを調べて、より詳細なエラー メッセージがあるかどうかを確認します。

于 2013-03-08T19:03:39.313 に答える
0

デプロイ後のスクリプトで、ユーザーをロールに関連付ける必要があります。

http://msdn.microsoft.com/en-us/library/aa833199(v=vs.100).aspx

于 2013-03-08T18:57:30.130 に答える