Я запускаю 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, утверждает, что приложение находится в полном доверии.
Для рассматриваемого акта безопасности на SQL Server, установлена ли «база данных по умолчанию» на соответствующую базу данных или она все еще указана в качестве «главной» базы данных по умолчанию? O
Если экземпляр базы данных находится на другом сервере, чем веб-приложение, вам нужно будет добавить имя входа SQL для DOMAIN \ WEBSERVER $, а затем предоставить ему доступ к соответствующей базе данных.
Я просто не понимаю, может ли файл web.config быть проблемой уровня доверия? Кроме того, находится ли SQL Server в режиме проверки подлинности Windows или режиме смешанной проверки подлинности? SQL Server настроен для TCP / IP? Я думаю, что в SQL Server 2008 TCP / IP отключен и по умолчанию использует общую память или именованные каналы.
Я бы протестировал с явной учетной записью, которую я настроил на локальном компьютере и поместил в приложение IIS как анонимный пользователь. Таким образом, вы можете протестировать его из SSMS или VS и быть уверенным, что сможете без проблем подключиться к серверу и базе данных.
Как только это сработает, или если это не так, вы можете отладить, где на стороне ASP может возникнуть сбой. Сторона SQL проста, хотя я не пробовал использовать учетную запись сетевой службы. Не должно быть причин, по которым это не работает, но я не видел, чтобы кто-нибудь использовал его.
Я гонялся за этой ошибкой час или больше. Я пробовал много чего, включая настройку Sql Server, добавление пользователя Network Service и другие.
Вам необходимо убедиться, что база данных, указанная в строке подключения, соответствует той, для которой вы предоставили пользователю разрешения.
Однако в конце концов проблема заключалась в том, что в моей базе данных в строке подключения была опечатка - a l и an i были переставлены, что было трудно уловить в том разрешении, которое я использовал.
Итак, я предлагаю: найдите другое приложение, которое позволяет вам проверить строку подключения, и проверить строку подключения.
Не ответ, но, возможно, обходной путь: когда я подключаюсь к SQL Server из веб-приложения, я всегда использую проверку подлинности SQL, которая не интегрирована. Я также использую разные логины SQL для чтения данных и записи данных, т.е. когда страницы должны записывать данные, я использую учетную запись с доступом на запись, а для всех других страниц я использую учетную запись с доступом только для чтения. Это кажется мне более безопасным, и поскольку я могу использовать разные логины для разных приложений, я могу отслеживать, какое приложение использует базу данных.
JR