Подключение к Oracle через ODBC после истечения срока действия пароля - PullRequest
0 голосов
/ 04 мая 2018

Наша компания имеет библиотеку C ++, которая использует внутренние API-интерфейсы ODBC, и в частности функцию SQLConnect для подключения к нашей базе данных Oracle.

Предположим, однако, что я установил срок действия пароля пользователя (с помощью внешнего инструмента, такого как PL / SQL Developer). Внезапно следующий вызов завершается неудачей ...

SQLConnect("<My DSN>", "The user whose password has expired", "The expired password");

... с кодом возврата -1 (и это справедливо).

У меня такой вопрос: возможно ли разрешить тому же пользователю временно подключаться через SQLConnect (или, возможно, через какую-либо другую функцию ODBC) к нашей базе данных Oracle с единственной целью изменить свой пароль? То есть без подключения как SYSDBA или аналогичный ...

1 Ответ

0 голосов
/ 07 мая 2018

Мы пришли к выводу, что не существует функции ODBC, так что она меняет пароль пользователя, когда указанный пользователь был отмечен как просроченный; API ODBC, хотя и мощный сам по себе, для этой цели недостаточно.

Таким образом, мы выбрали другой подход: поскольку мы используем Oracle 11g и на наших машинах установлен Oracle Instant Client, мы прибегли к использованию OCI (Oracle Call Interface), в частности его функции OCIPasswordChange.

sword password_change_status = OCIPasswordChange(svchp, errhp, (CONST text *)sUser, strlen(sUser), (CONST text *)sOldPassword, strlen(sOldPassword), (CONST text *)sNewPassword, strlen(sNewPassword), OCI_AUTH);

Естественно, есть, вероятно, несколько других альтернатив, таких как создание функционального пользователя базы данных и использование этого пользователя для изменения пароля другого пользователя, но этот подход хорошо работает.

...