Ошибка входа в SQL Server 2008 с приложением ASP.NET: не удалось открыть явно указанную базу данных
Я использую SQL Server 2008 Express Edition на Windows Server 2008 с приложением ASP.NET, которое должно получить доступ к серверу. Приложение ASP.NET связано с пулом приложений, который выполняется на NetworkService
учетная запись. Эта учетная запись, в свою очередь, имеет регистрационную запись и запись пользователя на SQL Server в необходимой базе данных. Когда я пытаюсь запустить веб-сайт ASP.NET, я получаю пустую страницу, и при просмотре в журнале ошибок у меня появляется такая запись о событии:
Ошибка входа для пользователя 'NT AUTHORITY\NETWORK SERVICE'. Причина: не удалось открыть явно указанную базу данных. [КЛИЕНТ: myLocalMachine]
Строка подключения имеет Trusted_Connection=True
; и указана необходимая база данных.
Когда я явно указываю имя пользователя и пароль, я получаю еще одну ошибку при входе в систему, сообщающую, что пароль неверен, хотя такая же комбинация un/pw работает через SQL Server Management studio. NETWORK SERVICE
Учетная запись, кажется, имеет все необходимые привилегии для базы данных. Кроме того, я сделал тестовый проект веб-сайта ASP.NET, который делает простой выбор из таблицы в этой базе данных, и, используя тот же файл конфигурации, я не получаю сообщение об ошибке, и, похоже, оно работает.
Это как-то связано с уровнями доверия, потому что исходное веб-приложение ASP.NET ссылается на различные библиотеки DLL, включая библиотеки с открытым исходным кодом. Кроме того, кажется, что приложение не может записывать данные в сам журнал событий, создавая исключение безопасности, даже если все в файлах конфигурации, включая machine.config, указывает, что приложение полностью доверяет.
6 ответов
Я бы проверил с явной учетной записью, которую я настроил на локальном компьютере и поместил в приложение IIS как анонимный пользователь. Таким образом, вы можете протестировать его из SSMS или VS и быть уверенным, что вы можете без проблем подключиться к серверу и базе данных.
Как только это сработает, или, если это не так, вы можете отлаживать, где на стороне ASP это может быть неудачным. Сторона SQL проста, хотя я не пробовал учетную запись сетевой службы. Не должно быть причин, по которым это не работает, но я не видел, чтобы кто-нибудь использовал это.
Я преследовал эту ошибку в течение часа или более. Я пробовал много вещей, включая настройку Sql Server, добавление пользователя Network Service и других.
Необходимо убедиться, что база данных, указанная в строке подключения, совпадает с той, для которой вы предоставили разрешения пользователю.
Однако, в конце концов, проблема, с которой я столкнулся, заключалась в том, что в моей базе данных в строке подключения были опечатка и я были транспонированы, что было трудно подобрать в используемом мной разрешении.
Итак, мое предложение здесь: найдите другое приложение, которое позволяет вам проверять строку подключения и проверять строку подключения.
Может быть, файл web.config может быть проблемой уровня доверия? Кроме того, SQL Server находится в режиме аутентификации Windows или в режиме смешанной аутентификации? SQL Server настроен для TCP/IP? Я думаю, что в SQL Server 2008 TCP/IP отключен и по умолчанию использует общую память или именованные каналы.
Для рассматриваемого акта безопасности на SQL Server "база данных по умолчанию" настроена на соответствующую базу данных или она по-прежнему указана в качестве основной базы данных по умолчанию? O
Если экземпляр базы данных находится на сервере, отличном от веб-приложения, вам потребуется добавить имя входа SQL для DOMAIN\WEBSERVER$, а затем предоставить ему доступ к соответствующей базе данных.
Не ответ, но, возможно, обходной путь, когда я подключаюсь к SQL Server из веб-приложения, я всегда использую SQL-аутентификацию, не интегрированную. Я также использую разные логины SQL для чтения данных и записи данных, т. Е. Когда страницы должны записывать данные, я использую учетную запись с доступом для записи, а для всех остальных страниц я использую учетную запись только с правом чтения. Это кажется мне более безопасным, и поскольку я могу использовать разные логины для разных приложений, я могу отслеживать, какое приложение использует базу данных.
JR