Приложение IIS7, использующее неправильную базу данных SQL Server 2008 Express

Я в тупике. У меня есть клиентский сайт на виртуальном частном сервере - Windows Web Server 2008 SP2, IIS7, SQL Server 2008 Express.

Я пытаюсь настроить второе веб-приложение, чтобы он мог просматривать обновления до их выхода в эфир. Я создал веб-приложение в IIS7 и добавил вторую базу данных для SQL Server. Второй БД по сути является копией производственного БД с префиксом "DEV" перед именем базы данных и несколькими новыми полями в нескольких таблицах.

Моя производственная площадка работает нормально. Тем не менее, тестовый сайт возвращается с SqlException: "Недопустимое имя столбца" версия "." Это одно из новых полей, которое заставляет меня поверить, что мой сайт разработчиков ссылается на производственную базу данных, а не на базу данных разработчиков. Строки подключения, однако, указывают на разные базы данных (хотя логин для них одинаков):

  • Рабочий сайт: "Сервер =.\SQLExpress; База данных =myDbName; Идентификатор пользователя =myUserName; Пароль =myUserPassword;"
  • Сайт разработчика: "Сервер =.\SQLExpress; База данных =DEVmyDbName; Идентификатор пользователя =myUserName; Пароль =myUserPassword;"

Похоже, это должно быть что-то очевидное, что я скучаю. Коллега предложил мне создать еще один пул приложений для второго приложения IIS, но, похоже, это не помогло.

ОБНОВЛЕНИЕ, после дальнейшего тестирования:

Я изменил строку подключения сайта разработчика на

"Server=.\SQLExpress;Database=DEVmyDbName;User ID=devuser;Password=myNewDifferentPassword;"

и создал новый логин SQL-сервера в базе данных и предоставил ему доступ только к базе данных dev. Я также установил базу данных dev как базу данных по умолчанию для учетной записи. Я удалил доступ к базе данных dev из рабочего логина. Когда я пытаюсь войти на сайт, я получаю следующую ошибку:

  • Основной сервер "devuser" не может получить доступ к базе данных "myDbName" в текущем контексте безопасности.

В результате я точно знаю две вещи:

  1. Поскольку для входа в систему используется новое имя пользователя, я знаю, что приложение использует строку подключения, которую я передаю;
  2. По какой-то причине после входа в систему он, похоже, игнорирует указанную базу данных и пытается использовать вместо нее производственную базу данных.

Все еще в тупик.

2 ответа

После еще большей копания я нашел виновника - это была проблема приложения, связанная с настройкой NHibernate. Один из заданных параметров конфигурации NHibernate был "default_schema" - когда я удалил его, приложение начало подключаться к правильной базе данных.

Похоже, что свойство default_schema переопределяло любую базу данных, указанную в строке подключения.

Похоже, у вас есть более одной строки подключения; Возможно ли, что где-то хранится в приложении?

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

Если у вас есть доступ к полной версии SQL, вы можете запустить Profiler для экземпляра SQLExpress и отслеживать активность.

Другие вопросы по тегам