SQLNET.AUTHENTICATION_SERVICES = (NTS) и ASP.NET - PullRequest
3 голосов
/ 21 января 2010

Я пытаюсь получить доступ к базе данных оракула, используя

using System.Data.OracleClient;

из консольного приложения, доступ к базе данных в порядке. Однако с веб-сайта ASP.NET я получаю сообщение об ошибке:

ORA-12640: Authentication adapter initialization failed

Я погуглил и обнаружил, что изменение файла sqlnet.ora решит проблему

//before
SQLNET.AUTHENTICATION_SERVICES= (NTS)
//after
SQLNET.AUTHENTICATION_SERVICES= (NONE)

Позже я обнаружил, что другое приложение на том же сервере, которое также использует другую базу данных Oracle, требует, чтобы значением SQLNET.AUTHENTICATION_SERVICES было "NTS". Это может привести к тому, что мой веб-сайт не сможет получить доступ к базе данных с ошибкой ORA-12640. Я попробовал «ВСЕ» как ценность, но все же это не сработало.

Как я могу настроить свой веб-сайт для доступа к базе данных Oracle, когда sqlnet.ora настроен как «SQLNET.AUTHENTICATION_SERVICES = (NTS)»?

P.S. веб-сайт использует проверку подлинности Windows и олицетворяет следующее:

<authentication mode="Windows"/>
<identity impersonate="true"/>

Ответы [ 2 ]

3 голосов
/ 21 января 2010

Для меня это выглядит как проблема multi-hop .

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

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

Если вам придется выдавать себя за вызывающего пользователя по сети, используемый метод будет зависеть от вашей среды. Для получения дополнительной информации см. Как использовать олицетворение и делегирование в ASP.NET 2.0 .

0 голосов
/ 15 февраля 2018

Я тоже столкнулся с той же проблемой, но наконец-то все заработало. Создала учетную запись службы (с именем kerb_user в активном каталоге) и изменила аутентификацию пула приложений, чтобы она выполнялась как «kerb_user». Сначала я попробовал с этим, но это не удалось. Пожалуйста, проверьте журнал запросов в базе данных Oracle, где вы можете тщательно проверить OS_USERNAME. В моем случае это показывает kerb_user, где, как и для другого пользователя kerberos, к запрашиваемому пользователю OS_USERNAME было добавлено доменное имя, которое в моем случае отсутствовало. Затем я сделал два изменения.

  1. Изменено удостоверение пула приложений с помощью доменного имени - kerb_user@xyz.com
  2. Изменен файл sqlnet.ora на сервере приложений и изменена аутентификация на «ALL»

// раньше - не работает

SQLNET.AUTHENTICATION_SERVICES = (НЕТ)

// после - сработало

SQLNET.AUTHENTICATION_SERVICES = (ALL)

Debugging

  1. Проверьте журнал оракула, если запрошенный OS_USERNAME имеет суффикс имени домена (здесь kerb_user@xyz.com) или нет, если суффикс определенно это будет работать.

  2. Пожалуйста, проверьте на сервере (app и db), имя учетной записи должно быть одинаковым.

  3. Проверьте пользователя на сервере базы данных, есть ли у него доступ Kerberos к этой базе данных.

  4. Проверьте настройки SPN

Ссылка: https://www.codeproject.com/Articles/27554/Authentication-in-web-services-using-C-and-Kerbero

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...