LINQ в ASP.NET - выдает исключение при развертывании на сервере - PullRequest
0 голосов
/ 29 июня 2009

Я подключаюсь к базе данных SQL Server через LINQ в моем приложении ASP.NET (возвращаю результаты веб-службе). Проблема в том, что он возвращает результаты только тогда, когда я запускаю его в режиме отладки / тестирования - при публикации службы я получаю сообщение об ошибке "Ошибка входа пользователя 'NT AUTHORITY \ NETWORK SERVICE'"

Итак, как мне установить / предоставить учетные данные, которые я хочу использовать для доступа сайта к SQL Server?

Заранее спасибо за любую помощь

Ответы [ 4 ]

2 голосов
/ 29 июня 2009

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

Так что вместо того, чтобы использовать что-то вроде этого:

using (var dc = new MyDataContext()) {
   ...
}

использование

using (var dc = new MyDataContext(MyConnectionString)){
  ...
}

... и возьмите MyConnectionString из вашего конфигурационного файла ...

2 голосов
/ 29 июня 2009

Вы должны установить учетные данные в строке подключения.

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

1 голос
/ 29 июня 2009

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

В вашем случае, я подозреваю, что вы используете встроенную аутентификацию и застигнуты врасплох разрешениями безопасности SQL. Когда вы тестируете это в своей локальной среде, отлаживая его в Visual Studio, он запускается под вашими учетными данными. Скорее всего, ваша учетная запись пользователя является администратором (владельцем БД) в базе данных, и, таким образом, у вас есть полное разрешение для базы данных.

При развертывании IIS запускается с учетными данными NetworkService. Когда вы пытаетесь получить доступ к базе данных, запрос не выполняется, потому что NetworkService не были предоставлены права в базе данных для каждой из таблиц / views / sprocs / и т. Д.

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

1 голос
/ 29 июня 2009

Сначала несколько вопросов

  1. Является ли сервер SQL на той же машине?
  2. Если он находится на другом компьютере, находится ли он в домене?
  3. Используете ли вы полную установку SQL или SQL Express?

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

Если он находится на той же машине, вам нужно добавить сетевую службу в список разрешенных пользователей в SQL. Для этого запустите SQL Management studio, разверните папку безопасности, затем щелкните правой кнопкой мыши на Logins и выберите New Login. Нажмите кнопку поиска в диалоговом окне «Вход в систему - новый», убедившись, что выбрана проверка подлинности Windows, затем введите «Сетевая служба» в поле имени объекта и нажмите «ОК». Выберите базу данных, к которой вы хотите получить доступ, из выпадающего списка на странице «Вход в систему - новая» и нажмите «ОК». Наконец, разверните папку баз данных и для каждой базы данных, которой вы хотите предоставить доступ для расширения безопасности, щелкните правой кнопкой мыши по пользователям, затем выберите имя для входа в сетевую службу, введите имя в диалоговом окне «Сетевая служба» и предоставьте ему правильный доступ, проверка роли в списке членства в роли базы данных. Если вы бездельничаете, db_owner будет в порядке, вы можете заблокировать это позже.

Если сервер SQL находится в другом блоке, а вы находитесь в домене, вы можете запустить пул приложений как пользователь домена и предоставить этот доступ к блоку SQL. Как это сделать, зависит от версии IIS.

Наконец, вы можете использовать логины и пароли SQL, если сервер SQL настроен для этого. Создайте пользователя SQL, а затем добавьте его в строку подключения, например,

Data Source=myServerAddress;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...