あなたが説明する問題は、Kerberos 構成として知られている骨の折れるプロセスによって (最終的には) 解決できる、古典的なダブルホップ シナリオです。怠惰な回避策には、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
可能であれば、LDAP 管理者に相談して、OPENQUERY を調整するためのグループの正しい domainComponents と organizationUnits を取得してください。これの欠点の 1 つは、明らかにメンバーシップのサイズによっては、AD グループのクエリに時間がかかることです。面倒かもしれませんが、アプリがユーザーを変数として渡すことができる限り、OPENQUERY を利用したり、sys.database_principals をクエリしてアクセスを確認したりできます。