2012-03-08 3 views
1

У меня IIS7.5 с двумя веб-сайтами, и у меня есть база данных Access на сервере в нашей сети.IIS7.5 MS Access Authentication

Первый веб-сайт имеет анонимное удостоверение подлинности, используя определенную сетевую учетную запись (скажем, «jim.smith»).

На втором веб-сайте есть окна auth on.

Я написал несколько ASP для подключения DSN-Less к базе данных Access, и я использую тот же код на обоих сайтах.

При входе в систему на компьютере с той же сетевой учетной записью, которая используется с анонимной настройкой первого сайта («jim.smith») - при просмотре в браузере первый веб-сайт имеет доступ к базе данных, второй на сайте нет.

Сообщение об ошибке: 80004005 Механизм базы данных Microsoft Jet не может открыть файл «...». Он уже открыт исключительно другим пользователем или вам требуется разрешение на просмотр его данных.

Это определенно не открывается другим пользователем.

Таким образом, первый веб-сайт доступен пользователю сети jim.smith через анонимную настройку.

Второй веб-сайт доступен пользователю сети «jim.smith» через windows auth.

Зачем нужен доступ к базе данных с сайта один, а не веб-сайт два ..?

Кто-нибудь знает, как заставить windows auth работать так же, как анонимный параметр, поэтому у меня есть доступ к базе данных с сайта два ..?

Cheers!

Стив

Edit: Каждый человек имеет полные права на папку, в которой сидит базы данных.

+0

Вы смотрели разрешения на папке? Access создает файл блокировки (ldb), и если у пользователей нет разрешений в папке, они не могут получить доступ к файлу блокировки и, следовательно, не могут использовать базу данных. – Fionnuala

+0

Да, извините, должно было сказать, что у всех есть полные права на папку. Но, как я уже сказал, в любом случае пользователь должен использовать один и тот же пользователь (jim.smith) с обоих сайтов, поэтому должен применяться один и тот же уровень разрешений *. Разница заключается в том, что один веб-сайт анонимный (с использованием jim.smith's), а один - windows auth (зарегистрирован как jim.smith). –

ответ

0

Мне кажется, что вам необходимо включить олицетворение, чтобы входящий пользователь использовал доступ к базе данных. В противном случае пользователь пула приложений используется, и это, как правило, даже не имеет право на самом сервере (Application Pool Идентичность)

При использовании «Integrated Pipeline» на IIS на сервере, и если ваше приложение не полагается на олицетворение запрашивающего пользователя на этапах «BeginRequest» и «AuthenticateRequest» (единственные этапы, когда олицетворение невозможно в интегрированном режиме), но все же требует олицетрации в других областях приложения, игнорировать эту ошибку (500 - Внутренняя ошибка сервера), добавив следующее в web.config вашего приложения.

<system.webServer> 
     <validation validateIntegratedModeConfiguration="false"/> 
</system.webServer> 

См: http://allen-conway-dotnet.blogspot.com/2010/11/how-to-use-impersonation-in-aspnet.html

+0

Спасибо за ответ Schwarzie2478, я попытался добавить эту строку в свой файл web.config, но он все равно не работает. Для записи я использую Classic ASP не .NET. –

+0

Упс, привычка принимать ASP.NET – Schwarzie2478