Вы должны предоставить разрешение доступа в SQL Server для учетной записи NT AUTHORITY\NETWORK SERVICE
, если вы используете локальный SQL Server или для DomainName\AspNetServer$
(где AspNetServer - это имя сервера, на котором работает IIS7).Подробности см., Например, в последнем разделе http://msdn.microsoft.com/en-us/library/ff647402.aspx.
UPDATED
: Прежде всего не забудьте настроить виртуальный каталог IIS для включения «Аутентификации Windows» и отключения «Анонимной аутентификации».".
Я не уверен, что basicHttpBinding
- лучший выбор для вас.Вы почти ничего не написали о своей службе WCF, поэтому я не могу порекомендовать вам способ.Посмотрите, например, http://msdn.microsoft.com/en-us/library/ms734769.aspx, какие способы вы можете выбрать.
Для доступа к локальной БД вы можете использовать олицетворение пользователя.Это может быть реализовано либо для каждого вызова WFC, либо вы можете выполнить временную олицетворение перед доступом к БД.(см., например, http://www.danrigsby.com/blog/index.php/2008/04/17/impersonate-a-clients-identity-in-wcf/).
Основная проблема заключается в том, что лучший способ для доступа к базе данных из службы отсутствует.Если вы выбираете олицетворение, например.Это может выглядеть красиво, потому что внутри базы данных видно, от какого пользователя пришел запрос.Но во многих реальных ситуациях использование подражания не действительно решает проблему, а только направляет ее.Кто должен управлять разрешением внутри базы данных?В отношении какого инструмента следует предоставлять разрешение пользователям.Кто занимается администрированием пользователей в вашей корпорации?У вас есть только одно администрирование пользователей в Active Directory или же администрирование баз данных SQL Server?Поэтому из-за существующих процессов в вашей корпорации олицетворение пользователя может быть не лучшим выбором.
Существует множество различных сценариев доступа к БД из WCF.Например, в последнем проекте, который я реализовал, я написал сервис WCF, в котором много методов.Внутри каждого метода непосредственно в начале метода я использовал API-интерфейс Microsoft Authorization Manager, чтобы проверить, есть ли у пользователя разрешение на соответствующую операцию или нет.Один из них использовал оснастку «Диспетчер авторизации», чтобы предоставить разрешение пользователю, назначив ему какую-то роль приложения.А для доступа к базе данных я использовал одну учетную запись пользователя (например, NT AUTHORITY\NETWORK SERVICE
в вашем случае).Тем не менее, решение было безопасным, и у каждого был инструмент для администрирования пользователей, соответствующий бизнес-требованиям.
У меня слишком мало информации о вашей среде и бизнес-требованиях, чтобы дать вам одну рекомендацию.Я хочу лишь объяснить, что вам, вероятно, нужно составить концепцию безопасности вашего решения на основе различных возможностей, которые у вас есть.