2

web.configでimpersonation="true"を使用するように設定されている既存のアプリケーションに、EntityFrameworkとASP.NETDynamic Dataを組み込んでいますが、以前の開発者は、それぞれのアプリプールIDに戻るアプローチを選択しました。彼らが行ったDAL呼び出し

private WindowsImpersonationContext context = null;

public void RevertToAppPool()
{
    if (!WindowsIdentity.GetCurrent().IsSystem)
    {
        context = WindowsIdentity.Impersonate(System.IntPtr.Zero);
    }
}

public void UndoImpersonation()
{
    if (context != null)
    {
        context.Undo();
    }
}

Entity Frameworkを使用している間、この動作を維持するように求められました...エンティティオブジェクトがあらゆる場所で使用されている場合(LINQ to EFクエリ、手動呼び出し、フレームワークによる舞台裏の呼び出しなど)、すべての呼び出しに対してRevertToAppPoolとUndoImpersonationを適切に呼び出すために、部分クラスの適切な場所はどこにありますか?

4

1 に答える 1

1

ほとんどの場合、カスタムEntity Frameworkプロバイダーラッパーを作成し、ラップされた接続で、接続を開く前に偽装を元に戻し、接続を開いた後に元に戻す必要があります(うまくいけば十分です)。代わりにデータベースにSQL認証を使用すると、ライブがはるかに簡単になります。

データアクセスのために元に戻すことによる強制は、かなり奇妙な解決策のように見えます。そのアプリケーションでのなりすましのポイントは何ですか?

于 2011-08-17T21:03:02.237 に答える