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