Приложение 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" в текущем контексте безопасности.
В результате я точно знаю две вещи:
- Поскольку для входа в систему используется новое имя пользователя, я знаю, что приложение использует строку подключения, которую я передаю;
- По какой-то причине после входа в систему он, похоже, игнорирует указанную базу данных и пытается использовать вместо нее производственную базу данных.
Все еще в тупик.
2 ответа
После еще большей копания я нашел виновника - это была проблема приложения, связанная с настройкой NHibernate. Один из заданных параметров конфигурации NHibernate был "default_schema" - когда я удалил его, приложение начало подключаться к правильной базе данных.
Похоже, что свойство default_schema переопределяло любую базу данных, указанную в строке подключения.
Похоже, у вас есть более одной строки подключения; Возможно ли, что где-то хранится в приложении?
Создайте новый идентификатор пользователя / пароль только в системе dev, измените строку подключения dev, чтобы использовать ее, если она подключается, проблема в другом месте.
Если у вас есть доступ к полной версии SQL, вы можете запустить Profiler для экземпляра SQLExpress и отслеживать активность.