10

IIS Express で実行されている ASP.Net MVC アプリケーションをデバッグしているときに、メンバーシップ プロバイダーを使用しようとすると、次のエラーが発生します。

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

ユーザー「MY-PC\MyName」のログインに失敗しました。

で概説されている手順を使用してトラブルシューティングを試みました

https://stackoverflow.com/a/2577854/141172

SELECT SUSER_ID('MY-PC\MyName')

ID を返します。

SELECT USER_ID('MY-PC\MyName')

NULL を返します

CREATE USER [MY-PC\MyName] FROM LOGIN [MY-PC\MyName]

エラーメッセージを返します

ログインには、別のユーザー名のアカウントが既にあります。

実際、データベースを作成したときに自動的に作成されるログイン アカウントがあります。

dbo

にマップされMY-PC\MyNameます。

私の接続文字列は

Data Source=.\SQLEXPRESS;Initial Catalog=MyDB;Persist Security Info=True;Integrated Security=SSPI;

実稼働環境で実行している場合、適切なユーザーとログオンを作成する方法を知っています。IIS Express が Windows アカウント名を使用して MyDB にログインしようとしているという事実を解決する方法に行き詰まっています。その Windows アカウントは既に に関連付けられていdboます。

4

1 に答える 1

13

接続文字列の初期カタログ部分のタイプミスであることが判明しました。

イベントログを見ると、次のようなエラーが表示されました

ユーザー「MY-PC\MyName」のログインに失敗しました。理由: 明示的に指定されたデータベースを開くことができませんでした。[クライアント: ]

次に、同じイベントの詳細タブを見ると、Binary Data In Bytes情報が含まれていることがわかりました。

0000: 18 48 00 00 0E 00 00 00   .H......
0008: 17 00 00 00 45 00 52 00   ....E.R.
0010: 49 00 43 00 2D 00 4F 00   I.C.-.O.
0018: 52 00 49 00 47 00 49 00   R.I.G.I.
0020: 4E 00 5C 00 53 00 51 00   N.\.S.Q.
0028: 4C 00 45 00 58 00 50 00   L.E.X.P.
0030: 52 00 45 00 53 00 53 00   R.E.S.S.
0038: 00 00 07 00 00 00 6D 00   ......m.
0040: 61 00 73 00 74 00 65 00   a.s.t.e.
0048: 72 00 00 00               r...

その最後の部分が、「マスター」という単語を UTF-16 でエンコードした方法に注意してください。これにより、接続が要求されたカタログではなくマスターカタログに対して行われていることがわかりました。これにより、接続文字列のカタログ名のタイプミスに気付きました。

Microsoft が「そのようなカタログはありません: MyCatalog」のようなエラーを表示するだけだったら、もっと良かったでしょう。

于 2012-07-24T15:41:14.597 に答える