Ошибка олицетворения для соединения с базой данных - PullRequest
2 голосов
/ 11 мая 2011

У меня есть приложение SL4, которое использует WCF для связи с базой данных внутреннего сервера SQL Server 2008.Одна из служб WCF должна подключиться к базе данных с выделенной системной учетной записью из-за разрешений базы данных, требуемых хранимой процедурой, которая вызывается.Я попытался реализовать решение с использованием олицетворения в коде службы, например

int result = LogonUser(userName, domain, password,
    LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_DEFAULT, out _token);

if (result > 0)
{
    ImpersonateLoggedOnUser(_token);
    //Code here to call NHibernate data access code
}

Моя строка подключения для этой службы:

<add name="MyConnection" connectionString="Data Source=servername\instance;Initial Catalog=MyDatabase;Integrated Security=SSPI" providerName="System.Data.SqlClient"/>

Однако процедура доступа к данным все еще не выполняется сследующее сообщение:

Ошибка входа пользователя 'NT AUTHORITY \ ANONYMOUS LOGON'.

Олицетворение игнорируется в соединении с базой данных.Есть идеи?

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Измените LOGON32_LOGON_NETWORK на LOGON32_LOGON_NETWORK_CLEARTEXT в вашем звонке на LogonUser.

Это кэширует учетные данные для входа в локальный поставщик безопасности, что должно обеспечить успешное подтверждение связи SSPI с SQL Server.

0 голосов
/ 11 мая 2011

Мне действительно удалось заставить это работать, избавившись от кода API олицетворения и добавив следующее в мой web.config:

  <location path="Services/MyServiceThatNeedsHigherPermissions.svc">
    <system.web>
      <identity impersonate="true" userName="domain\MyAccountWithElevatedPermissions" password="******"/>
    </system.web>
  </location>

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...