2

以前の質問で、アプリケーション内で Windows 認証を使用する方法を尋ねていました。ユーザーはそこのアカウントでログインできますが、何も見つからないデータベース アクセス シナリオが 1 つあります。

基本的に、私はいくつかのサーバーを持っていますが、ここに問題があります。

一部のサーバーでは、SQL Server データベース サーバー用の Windows 認証アカウントを持っているため、資格情報の偽装を使用する必要があります。しかし、web.config のグローバル設定 (接続ごとではない) に気付き、ユーザーではなくアプリケーション (IIS または ASP) の Windows 認証アカウントを使用したい場合があります。(私の構成データベースへのアクセス)

どうすればこれを達成できますか?

Web アプリケーションは、Server 2003/2008 IIS 6/7/7.5 でホストされる ASP.NET MVC であり、クライアントは Windows XP 以降です。SQL Server Express/Standard 2005/2008 を混在させて使用。

4

3 に答える 3

6

偽装はサイト全体で行われるか、手動で有効にすることができます。残念ながら手動でオフにすることはできませんし、接続文字列を介して行うこともできません。

したがって、基本的に偽装をオフにしてから、偽装が必要なときにデータベース呼び出しを次のようにラップします。

using System.Security.Principal;

WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext ctx = null;
try
{
    ctx = winId.Impersonate();
    // Do your thing
}
catch
{
}
finally
{
    if (ctx != null)
        ctx.Undo();
}

asp.netの偽装に関するMSDN P&P ガイドには、さらに多くの情報があります。

于 2009-09-11T14:11:46.087 に答える
2

ASP.NET サーバーが SQL サーバー マシン上のユーザーを偽装できるように、ネットワーク上で委任を設定する必要があります。これは、サーバーが (ワークグループではなく) Active Directory で制御されたネットワーク上にあり、SQL サーバーが Web サーバーとは異なるマシン上にあることを前提としています。

ユーザーを偽装するデータベース サーバー コンピューターに対しては委任を構成し、サーバーにアクセスするアカウントとして ASP.NET ワーカー プロセス アカウントを使用するサーバー コンピューターに対しては委任を構成しません。

これができない場合は、委任を防止する Sql Server インスタンスで Windows/混合認証をオフにしてから、web.config 内の接続文字列で接続する Sql Server アカウントを手動で構成できます。

于 2009-09-11T14:11:57.960 に答える
0

ドメインコントローラーを使用します。これにより、ドメイン全体で1人のユーザーに同じ資格情報を伝達できます。

ワークグループの2番目のトリック-両方のサーバー(ASPとSQLServer)で(まったく同じログインとパスワードを使用して)偽装の同じアカウントを作成します。SQLServerでこのアクセス許可を付与することを忘れないでください。

于 2009-09-11T14:03:10.603 に答える