これはとても奇妙です。これが私の MVC 4 プロジェクトの web.config の接続文字列です。
私の単体テスト プロジェクトの App.Config ファイルの接続文字列は次のとおりです。
<add name="ConnectionString" connectionString="Data Source=THESERVERNAME;Initial Catalog=THETABLE;Persist Security Info=True;Integrated Security=SSPI" providerName="System.Data.SqlClient" />
(この投稿のプライバシーのみを目的として、実名を偽物に置き換えました)
私の単体テストは次のとおりです。
[Test]
public void GetMember_ByContractNumber_ReturnsAValidMember()
{
// Arrang
const Int64 contractNumber = 2604914977;
// Act
DTO.Member member = MemberCRUD.RetrieveMember(contractNumber);
//Assert
Assert.IsNotNull(member);
Assert.IsNotNullOrEmpty(member.FirstName);
Assert.IsTrue(member.ContractNumber > 0);
}
無事通過!データベースの CRUD 呼び出しから有効なメンバー オブジェクトが返されます。
問題:
しかし同時に、MVC コントローラーから本質的に同じ呼び出しと同じ接続文字列、DL 爆弾の同じ CRUD メソッドを作成しようとすると、コードのこの時点で出力されます。
そして、私はこの例外を受け取ります:
{"Login failed for user 'OURDOMAIN\\MYPCNAMEISHERE$'."} System.Data.SqlClient.SqlException
このデータベースはリモートであり、ローカル システムではありません。
明らかに権限ですが、これを解決する方法がわかりません。単体テストに合格した理由は、MVC アプリの IIS が AppPoolIdentity を使用していたのに対し、DB を呼び出すときに Windows アカウントを ID として使用していた可能性があるためだと思います。したがって、これを修正する方法がわかりません。私のweb.configでは、認証をNoneに設定していますが、Windows認証に設定して、IISでWindows認証を有効にしようとしました...うまくいきません。
設定を実行しようとしていますが、これまでのところ、この権限の問題に対して機能する組み合わせはありません。
再び IIS は AppPoolIdentity を使用するように設定されていますが、ネットワーク サービスを ID として試し、ネットワーク サービスをユーザーとして追加し、SQL DB へのアクセス許可を与えました。うまくいきませんでした。AppPoolIdentity を SQL Server DB に追加しようとしていますが、まだ機能するかどうかは疑問です。何を試すべきかわからない。-------------------------------- サポート写真 / 最新の設定 ------------ ------
私のweb.configで
(以下の AD アカウントで dbo 権限を持っています)
アップデート:
これが私が最新の時点で試したことです:
1) DB の SQL Server Security に次のユーザーを追加し、DBO 権限を付与しました。
- NT AUTHORITY\ANONYMOUS ログオン
- ドメイン\MYPCNAME$
- NT AUTHORITY\NETWORK サービス
2) アプリ フォルダーのファイル システム セキュリティ アクセス許可に次のユーザーを追加しました。
- 認証済みユーザー
- IUSR
- システム
- ネットワークサービス
- 私の広告アカウント (ドメイン\MYACCOUNT)
- IIS APPPOOL\MyAppPoolName
3) 次に、いくつかのことを試してみました.MVC ビューをレンダリングすると、すべてが同じエラー (ログインに失敗しました) で失敗しました:
Local Serviceを使用するようにアプリ プール ID を変更しました。次に、NT AUTHORITY\ANONYMOUS LOGON を使用して SQL DB に接続しようとしました - NT AUTHORITY\ANONYMOUS LOGON でログインに失敗しました
Local Systemを使用するようにプール ID を変更しました。'DOMAINNAME\MYPCNAME$' を使用して SQL に認証しようとしました - I get login failed for DOMAINNAME\MYPCNAME$ を取得します
Network Serviceを使用するようにアプリ プール ID を変更しました。「DOMAINNAME\MYPCNAME$」を使用して接続を試みました。- DOMAINNAME\MYPCNAME$ へのログインに失敗しました
アプリケーション プール ID をApplicationPoolIdentityを使用するように変更しました。「DOMAIN\MYPCNAMEN$」を使用して接続しようとしました。- DOMAINNAME\MYPCNAME$ へのログインに失敗しました