С помощью аутентификации Windows ваш пользователь проходит аутентификацию в веб-сервисе с использованием аутентификации Windows. Это не означает, что веб-сервис может использовать учетные данные пользователя для аутентификации на сервере SQL. То, что вы ищете, это олицетворение.
Ваш SQL-сервер находится на том же компьютере, что и веб-служба? В этом случае вы должны быть в порядке с обычным подражанием. В MSDN есть хорошая статья об олицетворении в ASP.Net. В общем, все, что вам нужно сделать, это добавить
<identity impersonate="true" />
в Web.config веб-службы. Это запустит код веб-службы от имени пользователя и позволит серверу SQL проходить аутентификацию с использованием контекста пользователя.
Однако, если ваш SQL-сервер находится на другом компьютере, вы должны использовать олицетворение на Уровень делегирования . Это означает, что ASP.Net должен иметь достаточно разрешений, чтобы позволить олицетворение пользователя на другом компьютере. Эти параметры можно настроить в AD, разрешив делегировать пользователю / компьютеру ASP.Net делегирование и удостовериться, что пользователь, которого вы пытаетесь олицетворять, не помечен как чувствительный, что вызывает делегирование.
По крайней мере, так в теории. Я провел несколько дней, пытаясь заставить делегацию работать в WCF безуспешно.
Как только вы включили олицетворение, вы можете использовать WindowsIdentity, чтобы увидеть, какой уровень олицетворения используется.
System.Security.Principal.WindowsIdentity.GetCurrent().ImpersonationLevel
Если это возвращает олицетворение, вы можете аутентифицироваться в процессах на локальном компьютере, используя идентификационные данные пользователя. Если это возвращает делегирование, вы можете проходить аутентификацию на других компьютерах, используя идентификационные данные пользователя.