0

これはとても奇妙です。これが私の 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$ へのログインに失敗しました

ここに画像の説明を入力

4

1 に答える 1

1

いくつかのオプションがあります:

  • アプリケーション プールを実行するアカウントを (ドメイン) サービス アカウントに変更し、この "ユーザー" にデータベースへの適切なアクセス許可を付与し、変更後に iisreset /noforce を実行します。
  • データベースに接続する前に、コードで偽装を使用します (例: http://www.codeproject.com/Articles/10090/A-small-C-Class-for-impersonating-a-User )。
  • コンピュータ アカウントにデータベースへのアクセス権を付与します (つまり、例外メッセージに表示されるアカウントを DB ユーザーとして追加できます)。
于 2012-10-28T19:43:27.610 に答える