Делегирование IIS to SqlServer. Странности
От: hstas  
Дата: 28.07.10 12:25
Оценка:
Имею следующую архитектуру.
На одном и том же IIS 6.0 (запущен от доменной учетки, входящей в локальную группу IIS_WPG) развернуты
1. Тонкий клиент (asp.net)
2. WCF сервис который хостится на этом IIS.

На другой машине крутится MS SQL Server 2000 (работает от локальной учетной записи).

делегирование настраивал по вот этому мануалу How to use Kerberos authentication in SQL Server

В итоге получил половинчатый результат — если с клиента подключатся к SQL серверу — то подключение идет под доменной учеткой пользователя.
А вот если с клиента дернуть функцию у WCF сервиса, которая тоже осуществляет такое же подключение — то получаю Login failed, т.к. подключение идет под учеткой IIS-а.

Имперсонация включена и на клиенте и на WCF сервисе (проверял через ServiceSecurityContext.Current.WindowsIdentity.Name).

Почему так происходит? Надо, чтобы пользователь проходил со своей учеткой по всему пути ASP.NET-клиент->WCF сервис->SQL Server

Что я пропустил?

Спасибо
Re: Делегирование IIS to SqlServer. Странности
От: vmpire Россия  
Дата: 28.07.10 13:22
Оценка:
Здравствуйте, hstas, Вы писали:

H>Имею следующую архитектуру.

H>На одном и том же IIS 6.0 (запущен от доменной учетки, входящей в локальную группу IIS_WPG) развернуты
H>1. Тонкий клиент (asp.net)
H>2. WCF сервис который хостится на этом IIS.

H>На другой машине крутится MS SQL Server 2000 (работает от локальной учетной записи).

H>делегирование настраивал по вот этому мануалу How to use Kerberos authentication in SQL Server

H>В итоге получил половинчатый результат — если с клиента подключатся к SQL серверу — то подключение идет под доменной учеткой пользователя.

Брацзер при этом запущен на том же компьютере, что и сервис?
Если нет — попробуйте запустить его с того же компьютера, будет ли отличаться результат? То есть, чтобы браузер, asp.net и WCF сервис были на одной машине, а SQL — на другой.

H>А вот если с клиента дернуть функцию у WCF сервиса, которая тоже осуществляет такое же подключение — то получаю Login failed, т.к. подключение идет под учеткой IIS-а.


H>Имперсонация включена и на клиенте и на WCF сервисе (проверял через ServiceSecurityContext.Current.WindowsIdentity.Name).

Как именно она включена?
Re[2]: Делегирование IIS to SqlServer. Странности
От: hstas  
Дата: 28.07.10 13:39
Оценка:
Здравствуйте, vmpire, Вы писали:

V>Здравствуйте, hstas, Вы писали:


H>>Имею следующую архитектуру.

H>>На одном и том же IIS 6.0 (запущен от доменной учетки, входящей в локальную группу IIS_WPG) развернуты
H>>1. Тонкий клиент (asp.net)
H>>2. WCF сервис который хостится на этом IIS.

H>>На другой машине крутится MS SQL Server 2000 (работает от локальной учетной записи).

H>>делегирование настраивал по вот этому мануалу How to use Kerberos authentication in SQL Server

H>>В итоге получил половинчатый результат — если с клиента подключатся к SQL серверу — то подключение идет под доменной учеткой пользователя.

V>Брацзер при этом запущен на том же компьютере, что и сервис?
V>Если нет — попробуйте запустить его с того же компьютера, будет ли отличаться результат? То есть, чтобы браузер, asp.net и WCF сервис были на одной машине, а SQL — на другой.

H>>А вот если с клиента дернуть функцию у WCF сервиса, которая тоже осуществляет такое же подключение — то получаю Login failed, т.к. подключение идет под учеткой IIS-а.


H>>Имперсонация включена и на клиенте и на WCF сервисе (проверял через ServiceSecurityContext.Current.WindowsIdentity.Name).

V>Как именно она включена?


Результат одинаков, и в случае если браузер запущен на той же машине где крутится IIS, и в случае если на другой тачке.

Имперсонация включена через web.config

<identity impersonate="true"/>
<authentication mode="Windows"/>
<authorization>
<deny users="?"/>
<allow users="*"/>
</authorization>


Соответственно, в настройках виртуальных каталогов, отключен анонимный доступ, и включена Виндовс аутентификация.
Re[3]: Делегирование IIS to SqlServer. Странности
От: vmpire Россия  
Дата: 28.07.10 13:58
Оценка:
Здравствуйте, hstas, Вы писали:

H>Здравствуйте, vmpire, Вы писали:


H>>>Имею следующую архитектуру.

H>>>На одном и том же IIS 6.0 (запущен от доменной учетки, входящей в локальную группу IIS_WPG) развернуты
H>>>1. Тонкий клиент (asp.net)
H>>>2. WCF сервис который хостится на этом IIS.

H>>>На другой машине крутится MS SQL Server 2000 (работает от локальной учетной записи).


H>>>А вот если с клиента дернуть функцию у WCF сервиса, которая тоже осуществляет такое же подключение — то получаю Login failed, т.к. подключение идет под учеткой IIS-а.


H>Результат одинаков, и в случае если браузер запущен на той же машине где крутится IIS, и в случае если на другой тачке.

Значит, дело не в настройках Kerberos

H>Имперсонация включена через web.config


H> <identity impersonate="true"/>

H> <authentication mode="Windows"/>
H> <authorization>
H> <deny users="?"/>
H> <allow users="*"/>
H> </authorization>
Мне кажется, это невалидная настройка. <identity impersonate="true"/> — это имперсонация в фиксированного пользователя, который должен быть указан. Попробуйте её убрать.

H>Соответственно, в настройках виртуальных каталогов, отключен анонимный доступ, и включена Виндовс аутентификация.

Это, вроде, правильно

Проверьте следующее:
1. Логи IIS, каталога с asp.net. Там должно быть обращение от нужного юзера (скорее всего, оно так и есть, просто, на всякий случай).
2. Логи IIS, каталога с WCF. Там тоже должно быть обращение от нужного юзера.
3. Проверьте, что в настройках connection pools галка Impersonate тоже выключена
Re[4]: Делегирование IIS to SqlServer. Странности
От: hstas  
Дата: 29.07.10 11:07
Оценка:
Домучил сию проблему.

Если обложить метот аттрибутом
[OperationBehavior(Impersonation = ImpersonationOption.Required)]

то все прекрасно заработало.


А декларативно это нельзя настроить в web.config?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.