Соединения с базой данных работают нормально, когда приложение запускается с локального хоста. Ошибка входа с сервера разработки

У меня есть приложение, которое подключается к базе данных, извлекает имя пользователя из пользовательской таблицы и сопоставляет его с именем пользователя, полученным с помощью System.Security.Principal.WindowsIdentity.GetCurrent.Name

На моем локальном хосте все работает нормально. База данных существует на сервере разработки, но приложение лежит на моем локальном хосте. Все мои методы авторизации и аутентификации работают без сбоев.

Однако, когда я публикую свое приложение на сервере разработки, я сталкиваюсь со следующей ошибкой.

Cannot open database requested in login 'databaseName'. Login fails.
Login failed for user 'DevelopmentServerName\ASPNET'. 

Я не могу понять, что может вызвать это. Любая помощь будет принята с благодарностью.

Спасибо!

Изменить: вот строка подключения!

  <add name="connectionStringName" connectionString="Initial Catalog=myDatabase;Data Source=DevelopmentServerName;Integrated Security=True"
     providerName="System.Data.SqlClient" />

Также для контекста. Эта проверка подлинности должна получить имя пользователя Windows и сопоставить его с именем пользователя в базе данных. Пользователи будут иметь имя пользователя Computername\Myname, встроенное в базу данных (если они авторизованы для использования требуемого раздела программы, т.е.).

Спасибо еще раз :)


person Chris    schedule 11.06.2009    source источник
comment
Вы говорите, что есть другие приложения, использующие базу данных. Как они делают первоначальный вход в базу данных?   -  person idstam    schedule 11.06.2009
comment
@idstam приношу свои извинения. Они не используют эту конкретную базу данных. Они обращаются к другим базам данных на этом же сервере.   -  person Chris    schedule 11.06.2009


Ответы (4)


Похоже, что ваше приложение пытается подключиться к базе данных под учетной записью ASPNET, которая может иметь ограниченные разрешения на сервере разработки, в отличие от входа в систему самостоятельно (ваш локальный компьютер может фактически использовать вашу личность Windows). Я вижу два возможных решения.

  1. Обязательно добавьте в раздел system.web файла web.config.

  2. Обратитесь к системному администратору и администратору SQL, чтобы убедиться, что учетная запись ASPNET имеет надлежащие полномочия для подключения к базе данных, если ваша среда действительно позволяет этой учетной записи подключаться.

Добавление дополнительного кода к вашему вопросу, например строки подключения, также может помочь.

РЕДАКТИРОВАТЬ: Хорошо, вы действительно используете IntegratedSecurity, поэтому, как правило, при такой настройке (с использованием олицетворения) вам нужно убедиться, что вам предлагается добавить свое имя пользователя и пароль для аутентификации.

У нас аналогичная настройка, и для этого нам нужно перейти к настройкам IIS для виртуального каталога, выбрать вкладку «Безопасность каталога» и нажать кнопку «Изменить» в разделе «Анонимный доступ и управление аутентификацией».

Убедитесь, что анонимный доступ не отмечен, и вам, скорее всего, потребуется включить правильную аутентификацию для вашей среды. К сожалению, здесь мы по-прежнему используем обычную аутентификацию (открытый текст), но встроенная аутентификация Windows может подойти и вам. Это зависит от вашей среды.

Я добавляю этот комментарий к основному сообщению, так как, похоже, это помогло...

Я только что нашел это сообщение, которое может помочь вам правильно настроить конфигурацию для обработки того, что вы нужно на основе вашей среды IIS.

person Dillie-O    schedule 11.06.2009
comment
Я добавил строку подключения к вопросу. Это поможет что-то прояснить? Раздел system.web моего файла web.config действительно существует. - person Chris; 11.06.2009
comment
Прежде всего, спасибо за ваш ответ. Цель всего этого — избежать любого входа в систему, поэтому запрос на добавление имени пользователя и пароля для аутентификации, к сожалению, не вариант. Приложение должно получить имя пользователя Windows с компьютера и сопоставить его с базой данных. Кроме того, у меня нет доступа к каким-либо параметрам конфигурации на самом сервере разработки, что ставит меня в затруднительное положение. - person Chris; 11.06.2009
comment
Если вы можете связаться с одним из администраторов сервера, посмотрите, могут ли они снять флажок «Анонимный» и выбрать встроенную аутентификацию Windows. Каковы настройки IIS на вашем локальном компьютере? - person Dillie-O; 11.06.2009
comment
На моем локальном компьютере включена встроенная проверка подлинности Windows, остальные не отмечены. Помимо приложения, над которым я работаю, на сервере разработки запущено несколько приложений, и мне посоветовали избегать любых методов, связанных с изменением настроек на самом сервере разработки (что усложняет ситуацию, но все же должен быть способ обойти это). это). Спасибо еще раз - person Chris; 11.06.2009
comment
Похоже, вам нужно связаться с одним из администраторов сервера и узнать, какова конфигурация IIS по умолчанию для новых виртуальных каталогов, и вам может потребоваться соответствующим образом расширить свое приложение. - person Dillie-O; 11.06.2009
comment
Я только что нашел этот пост, который может помочь вам правильно настроить конфигурацию для обработки того, что вам нужно, в зависимости от вашей среды IIS: forums.iis.net/t/1152237.aspx - person Dillie-O; 11.06.2009
comment
Круто, эта ссылка творила чудеса. Использование нитей работало как шарм. - person Chris; 11.06.2009

Ответ может лежать в вашей строке подключения. Я предполагаю, что вы используете встроенную аутентификацию для входа в базу данных. Это отлично работает, когда это ваша машина, потому что приложение использует ваши учетные данные. Когда вы публикуете на сервере разработки, вы будете использовать пользователя aspNet и не будете иметь правильных учетных данных для входа в систему. Я бы либо добавил этого пользователя на ваш сервер базы данных, либо изменил строку подключения, чтобы использовать аутентификацию SQL.

person Avitus    schedule 11.06.2009
comment
SQL-аутентификация? Как это может работать? Мы сохраняем действительные имена пользователей (например, имя компьютера/имя пользователя) в таблице имен пользователей и сопоставляем их с именем пользователя Windows текущего пользователя. - person Chris; 11.06.2009

Это может быть настройка брандмауэра, которая не позволяет вашему серверу видеть вашу базу данных.

Это также может иметь какое-то отношение к вашей строке подключения. Если вы используете в файле web.config что-либо помимо комбинации имени пользователя и пароля, вам, вероятно, потребуется дополнительная настройка, чтобы убедить сервер базы данных позволить вам подключиться.

person StriplingWarrior    schedule 11.06.2009
comment
+1 Когда рабочий сервер находится в dmz, вам обычно приходится обращаться к серверу sql по-разному. - person TGnat; 11.06.2009
comment
какие различные конфигурации должны быть на месте? и я не знаю, что такое дмз. - person Chris; 11.06.2009

Кажется, что вы хотите выдать себя за вызывающего абонента веб-страницы. Для этого вам нужно добавить строку в ваш web.config:

<identity impersonate="true" />

Объяснение см. в этой статье.

person quinnapi    schedule 11.06.2009