Ошибка Oracle ORA-12154 на локальном IIS, но не на сервере разработки Visual Studio - PullRequest
3 голосов
/ 24 августа 2011

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

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

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

Tt с использованием 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 без ошибок соединения.

Спасибо

Ответы [ 8 ]

6 голосов
/ 24 августа 2011

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

5 голосов
/ 07 апреля 2014

Найден ответ здесь:

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

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

IIS AppPool\<AppPoolName>

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

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

Таким образом, просто дайте разрешение на доступ к папке Oracle виртуальному пользователю App Pool.

1 голос
/ 13 января 2016

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

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

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

  1. Начало захвата
  2. Запустите код, который обращается к ресурсам Oracle, и подождите, пока Visual Studio вызовет исключение.
  3. Остановите захват.
  4. Фильтрполе Result для строки «ACCESS DENIED».
1 голос
/ 02 октября 2014

В моем случае я использую 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 Я перезапускаю AppPool и перезагружаю свой веб-сайт.

и все работает!

1 голос
/ 24 августа 2011

Разница:

  • При отладке в Visual Studio вы находитесь в безопасности вошедшего в систему пользователя (вы)
  • Когда вы работаете в IIS, выв контексте безопасности удостоверения пула приложений.По умолчанию используется сетевая служба.
0 голосов
/ 16 июня 2017

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

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

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

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

0 голосов
/ 22 марта 2016

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

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

0 голосов
/ 09 октября 2015

Публикация моего дела, потому что выяснение заняло слишком много времени.

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

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

...