Проблема с олицетворением в IIS7 — Entity Framework Trusted_Connection ASP.NET

Я разрабатываю приложение ASP.NET, которое подключается к базе данных (на другом компьютере). Когда я пытаюсь подключиться со своего компьютера, проблем нет, когда я развертываю его в среде назначения, EF возвращает исключение:

The underlying provider failed on Open.System.Data.SqlClient.SqlException (0x80131904): Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK) at System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, SqlConnection owningObject) at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout) at 

Моя конфигурация:

    <authentication mode="Windows" />
    <customErrors mode="Off"></customErrors>
    <identity impersonate="true" />
    <security>
        <authentication>
            <windowsAuthentication useKernelMode="false">
                <extendedProtection tokenChecking="None" />
            </windowsAuthentication>
        </authentication>
    </security>

И моя строка подключения:

 <add name="pmgbicopEntities" connectionString="metadata=res://*/copDB.csdl|res://*/copDB.ssdl|res://*/copDB.msl;provider=System.Data.SqlClient;provider connection string=&quot;Data Source=[NAME]\devde;Initial Catalog=[NAME];Integrated Security=True;Trusted_Connection=True;MultipleActiveResultSets=True&quot;" providerName="System.Data.EntityClient" />

Если я удаляю инструкцию базы данных, this.Page.User является моей текущей учетной записью (и это правильно!), но когда я открываю новое соединение через EF, я становлюсь «Анонимным»

Я пробовал с олицетворением, например:

WindowsIdentity winId = (WindowsIdentity)HttpContext.Current.User.Identity;
WindowsImpersonationContext ctx = null;
try
{
  ctx = winId.Impersonate();
  //EF SOMETHING
}
catch (Exception exx)
{
}
finally
{
  if (ctx != null)
  ctx.Undo();
}

Но я получаю то же исключение: «Ошибка входа в систему для пользователя« NT AUTHORITY \ ANONYMOUS LOGON »».

Я пытался изменить пользователя пула приложений, пытался выдать себя за него вручную, но безуспешно.

В конфигурации IIS есть кое-что из kerberos, которые я пытался включить и отключить, но ничего не изменилось.

У вас есть какие-либо предложения? Должен ли я включать что-то вроде «доверия» между машинами? Для моей машины разработки из «поддельного IIS» у меня нет проблем, но мой пользователь включен в БД.

Заранее спасибо.


person Ziba Leah    schedule 08.11.2013    source источник
comment
Вы находитесь в домене Active Directory? Если это так, вам необходимо настроить разрешения в SQL Server, чтобы клиентский компьютер (веб-сервер) мог получить доступ к базе данных. Попробуйте CREATE LOGIN [MyDomain\MyComputer$] FROM WINDOWS;   -  person Tom Hall    schedule 08.11.2013


Ответы (1)


Какова ваша конечная цель: передать учетные данные пользователя в SQL или использовать предопределенную учетную запись для подключения к SQL?

Вот настройки, которые мне пришлось настроить для работы Kerberos (что позволяет вам использовать разрешения учетной записи пользователя):

Настройки ИИС:

-Physical Path Credentials:  Application User (pass-through authentication)
-Physical Path Credential Logon Type:  Clear Text
-Application Pool ID:  Domain\ServiceAccount
-Integrated Windows Authentication:  Enabled
-Windows Authentication Providers:  Negotiate
-useAppPoolCredentials (found in Configuration Editor):  True

SPN, созданный для ServiceAccount: SETSPN -L Domain\ServiceAccount

HTTP/URL-адрес нашего веб-сайта.com

Если вы не хотите использовать учетную запись службы домена, замените ее на Domain\MachineAccount как в SPN, так и в пуле приложений.

person kcb263    schedule 08.11.2013