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

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

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

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

Мой сайт production работает нормально. Однако тестовый сайт возвращает SqlException: "Invalid column name 'version'". Это одно из новых полей, что наводит меня на мысль, что мой сайт dev ссылается на production базу данных, а не на dev. Строки подключения, однако, указывают на разные базы данных (хотя логин для обеих одинаков):

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

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

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

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

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

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

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

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

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

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

решение1

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

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

решение2

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

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

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

Связанный контент