あなたが説明する問題は古典的なダブルホップのシナリオです。(最終的には)ケルベロス構成と呼ばれる手間のかかるプロセスによって解決できます。 lazier回避策は、asp.netアプリケーションからの資格情報を変数としてデータベースのSQLクエリに渡すことです。
SQL ServerにリンクサーバーとしてLDAPサーバーが構成されている場合は、ストアドプロシージャを書き換えてユーザーを入力変数として受け入れることができ、次に進む前にユーザーがADグループのメンバーであるかどうかを確認できます。以下に示すように、あなたのストアドプロシージャにOPENQUERYを組み込む考えてみましょう:
CREATE PROCEDURE CheckAccess
@CurrentUser varchar(max)
AS
IF @CurrentUser IN
(
SELECT CN
FROM OPENQUERY(ADSI,'<LDAP://DC=Your,DC=DomainComponent,DC=com>;(&(CN=*)
(memberOf=CN=YourADGroupName,OU=Your,OU=OrganizationalUnit,OU=Name,DC=Your,DC=DomainComponent,DC=com));CN')
)
THEN
SELECT 'Authorized User'
ELSE
SELECT 'Unauthorized User'
END
あなたは、あなたがOPENQUERYを微調整するために、グループの正しいdomainComponentsとorganizationalUnitsを得ることを確認するためにLDAPの管理者に相談することができます。これの欠点の1つは、メンバーシップのサイズに応じてADグループを照会するのに時間がかかることです。それは痛みですが、アプリケーションが変数としてユーザーを渡すことができる限り、OPENQUERYを活用したり、sys.database_principalsにクエリしてアクセスを確認することもできます。
あなたが試みることができる1つのことは、CLRストアドプロシージャを書くことです。次に、WindowsIdentityを使用して、グループメンバーシップまたはすべてのユーザーのS4Uチェックを実行できます。 –