Ошибка Oracle ORA-12154 в локальном IIS, но не в Visual Studio Development Server

У меня есть приложение ASP.NET, которое может подключаться к Oracle, когда оно запускается Visual Studio Development Server, но когда я развертываю его в моем локальном IIS, оно не подключается, показывая «ORA-12154: TNS: не удалось разрешить указанный идентификатор подключения "ошибка.

Моя строка подключения была:

Data Source=ABC; User Id=USER; Password=PASSWORD;

Я использую TNS. Мой tnsnames.ora находится в C: \ oracle \ Instantclient_10_2 \ network \ admin, а моя системная переменная ORACLE_HOME указывает на C: \ oracle \ instantclient_10_2.

Чтобы заставить его работать, я изменил строку подключения на:

"SERVER=(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = server1.theplaceiwork.com)(PORT = 1521))(ADDRESS = (PROTOCOL = TCP)(HOST = server2.theplaceiwork.com)(PORT = 1521))(LOAD_BALANCE = yes))(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = ABC)(FAILOVER_MODE =(TYPE = SELECT)(METHOD = BASIC))));uid=USER;pwd=PASSWORD;"

Так что TNS больше не используется.

Но я хотел бы знать, почему я могу подключиться с помощью TNS при отладке с помощью Visual Studio, а при использовании IIS - нет.

Какие-нибудь советы?

PS. Я могу использовать SqlDeveloper с TNS, не показывая ошибок подключения.

Спасибо


person Fabio    schedule 24.08.2011    source источник
comment
IIS находится на той же машине, что и VS?   -  person NullUserException    schedule 24.08.2011
comment
Да, это машина разработки (Win2003).   -  person Fabio    schedule 25.08.2011


Ответы (8)


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

person rick schott    schedule 24.08.2011
comment
Да, я предоставил доступ к каталогу C: \ oracle \ Instantclient_10_2, и это сработало! Спасибо! - person Fabio; 24.08.2011
comment
Как проверить, есть ли у сетевого сервиса доступ к каталогу TNS? - person SUN Jiangong; 20.09.2012
comment
Мой пул приложений работает с ApplicationPoolIdentity, и я предоставил доступ к сетевым службам TNS-каталогам. У меня все еще такая же проблема. Пожалуйста помоги - person Jap Evans; 07.06.2013
comment
В моем случае я использую Windows 7, IIS 7, Visual Studio 2010, я установил 2 клиента Oracle 10.2 и 11.2 (у меня есть 2 TNSNNAMES.ORA в двух разных путях). Когда я использую F5, Visual Studio использует 1 TNSNAME, когда я использую IIS, он использует другой ORA !!, наконец, я даю обоим путям полный доступ к каждому пользователю учетной записи, а в AppPool в IIS я устанавливаю AppPoolIdentity, и он работает !. - person Hernaldo Gonzalez; 02.10.2014
comment
Я изменил пул приложений с ApplicationPoolIdentity на использование сетевой службы и предоставил разрешение сетевой службе в каталоге установки Oracle. Это сработало. - person stricq; 13.02.2015
comment
Для ApplicationPoolIdentity см. Здесь, как авторизоваться: ссылка - person Refael; 22.03.2016

Нашел здесь ответ:

Предоставление доступа к IIS 7.5 ApplicationPoolIdentity

При использовании ApplicationPoolIdentity с IIS 7.5 соответствующим пользователем является (пользователь виртуальной системы):

IIS AppPool\<AppPoolName>

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

http://www.iis.net/learn/manage/configuring-security/application-pool-identities

Так что в основном просто дайте разрешение на папку Oracle виртуальному пользователю пула приложений.

person Jaanus    schedule 07.04.2014
comment
Есть ли группа, в которую входят все пулы приложений? В противном случае мне нужно предоставлять разрешения каждый раз, когда я добавляю пул. - person Ochoto; 15.02.2018
comment
Если вы хотите предоставить разрешения для всех пулов приложений, вы можете включить пользователя виртуальной системы de IUSR в локальную группу ORA_HOMENAME_SVCSIDS. - person Ochoto; 16.02.2018

Разница в следующем:

  • Когда вы отлаживаете в Visual Studio, вы находитесь в безопасности зарегистрированного пользователя (вы)
  • Когда вы работаете в IIS, вы находитесь в контексте безопасности удостоверения пула приложений. По умолчанию - сетевая служба.
person Shiraz Bhaiji    schedule 24.08.2011

В моем случае я использую Windows 7, IIS 7, Visual Studio 2010. По какой-то причине я установил 2 клиента Oracle, 10.2 и 11.2 (у меня есть 2 TNSNAMES.ORA в двух разных путях). Когда я использую F5, Visual Studio использует одно TNSNAME, а когда я использую IIS, используется другое TNSNAME!

Если я использую CMD и напишу:

tnsping ORCL

Это дает мне версию Oracle, которую я использую: 10.2, а не 11.2. Я пытаюсь отключить брандмауэр Windows, но ничего не получается. Я пытаюсь войти в IIS-> AppPool с моей учетной записью Windows, но не работаю.

Наконец, чтобы исправить (через 2 дня чтения множества решений в stackoverflow и других):

  • Я даю доступ на чтение к обоим путям C: \ oracle \ product и C: \ app \ user \ product для всех пользователей учетной записи, потому что я не нашел Сетевая служба аккаунт.

  • В IIS -> AppPool я установил ApplicationPoolIdentity для своего пула.

  • В IIS я перерабатываю пул приложений и перезапускаю свой веб-сайт.

и это работает!

person Hernaldo Gonzalez    schedule 02.10.2014

Я настроил свой пул приложений для работы в контексте ApplicationPoolIdentity, как описывает @Jaanus.

Виртуальной учетной записи «IIS AppPool \ MyAppPoolName» было предоставлено разрешение на чтение и выполнение в папке Oracle, однако разрешения не унаследованы от этой папки. Мне пришлось пройти по структуре папок Oracle, чтобы увидеть, где останавливается наследование разрешений, и явно включить его с этого момента.

Я обнаружил проблему с помощью Process Monitor от SysInternals / Microsoft:

  1. Начать захват
  2. Запустите код, который обращается к ресурсам Oracle, и дождитесь, пока Visual Studio не вызовет исключение.
  3. Прекратите снимать.
  4. Отфильтруйте поле «Результат» по строке «ДОСТУП ОТКЛОНЕН».
person John    schedule 13.01.2016

Отправляю сообщение о моем случае, потому что это заняло слишком много времени, чтобы разобраться.

У меня не было доступа к настройке разрешений для папки, и настройка идентификатора пула приложений ничего не дала.

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

person imbrion    schedule 09.10.2015

Если вы используете ApplicationPoolIdentity, убедитесь, что ApplicationPoolIdentity имеет доступ к вашим каталогам TNS.

См. Здесь, как авторизоваться: Обзор разрешений IIS7 - ApplicationPoolIdentity

person Refael    schedule 22.03.2016

У меня была эта проблема, и я безуспешно пробовал все, что описано выше. Так что опубликовал еще одну вещь, которая могла быть упущена из виду. Ваш файл sqlnet.ora (тот же каталог, что и tnsnames.ora) должен существовать и иметь правильно настроенный TNS:

#SQLNET.AUTHENTICATION_SERVICES = (NTS)
NAMES.DIRECTORY_PATH = (EZCONNECT,TNSNAMES)

EZCONNECT не является обязательным, но в некоторых ситуациях очень полезен, поэтому я включил его.

Это было последнее, что позволило моему приложению работать. Надеюсь это поможет.

person jessewolfe    schedule 16.06.2017