Истечение срока действия пароля Oracle и обработка льготного периода с использованием клиента C # - PullRequest
2 голосов
/ 18 июля 2011

У меня есть клиент c #, и я использую базу данных Oracle 10g.

Мой запрос:

  1. Является ли период отсрочки истечения сверх даты истечения?
  2. Когда пользователь находится в льготном периоде, может ли пользователь изменить свой пароль, используя запрос ALTER USER XYZ IDENTIFIED BY SOMEPWD, или ему все еще нужно связаться с администратором базы данных.
  3. Как я могу обработать предупреждение оракула ORA-28002 (когда пользователь находится в льготном периоде) в клиенте c #. делает это вообще передается клиенту c #. Будет ли оно обрабатываться как исключение (try-catch).
  4. Когда срок действия пароля уже истек, только администратор базы данных может изменить ваш пароль.
  5. блокирует ли учетную запись также и после истечения срока действия сверх льготного периода.

Обратите внимание, что я не sys dba, поэтому я не могу получить доступ к dba_users или dba_profiles.

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 26 июля 2011

Наконец-то я нашел решение своей проблемы. Вот пункты для каждой информации:

1) Является ли льготный период истечения сверх даты истечения?

Ответ: Да, это выше и выше.

2) Когда пользователь находится в льготном периоде, он может изменить свой пароль, используя запрос «ALTER USER XYZ, ОПРЕДЕЛЕННЫЙ SOMEPWD», или ему все еще нужно связаться с администратором базы данных.

Ответ: Ни один пользователь не может выполнить этот запрос, потому что он сначала требует подключения к базе данных. С истекшим паролем вы не можете подключиться.

3) Как я могу обработать предупреждение оракула ORA-28002 (когда пользователь находится в льготном периоде) в клиенте c #. делает это вообще передается клиенту c #. Будет ли это обрабатываться как исключение (try-catch).

Ответ: Ошибка ORA-28002 может быть обработана в клиенте c # как OracleClientInfoMessage. Вот пример кода.

try
{
    OracleConnection conn = new OracleConnection("User ID=" + uid + ";Password=" + pwd + ";SERVER=" + server);
    conn.InfoMessage += new OracleInfoMessageEventHandler(GetOracleWarningInfoMessage);        
    conn.Open();
    return ConnectionStatus.OK;
}
catch (System.Data.OracleClient.OracleException ex)
{
    Logger.Error(ex);
    switch (ex.Code)
    {
        case 1005: //null password given
            errmsg = "Invalid password";
            return ConnectionStatus.InvalidUserPwd;
        case 1017: //invalid username/password
            errmsg = "Invalid username/password";
            return ConnectionStatus.InvalidUserPwd;
        case 1040: //invalid character in password
            errmsg = "Invalid password";
            return ConnectionStatus.InvalidUserPwd;
        case 28000://account locked
            errmsg = "Account locked. Contact DBA or wait for PASSWORD_LOCK_TIME";
            return ConnectionStatus.Locked;
        case 28001://password expired                       
            errmsg = "Password expired. Contact DBA";
            return ConnectionStatus.Expired;
        default:
            errmsg = ex.Message;
            return ConnectionStatus.Failed;
    }
}

4) Если срок действия пароля уже истек, то только администратор базы данных может изменить ваш пароль.

Ответ: Пользователь может изменить пароль самостоятельно. Если вы используете драйвер SQLPlus или ODP.net, вы получите приглашение. Однако, если вы используете драйвер OracleClient (Microsoft), вы не сможете этого сделать, поскольку в нем отсутствует функция OpenWithNewPassword (которая позволяет сменить пароль перед установлением соединения). Вероятно, из-за отсутствия сотрудничества между Mircosoft и Oracle. Поддержка OpenWithNewPassword доступна только в драйвере ODP (OracleDataProvider) и собственном OCL. Подробнее см. По ссылке: MSDN или Oracle .

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

Ответ: Нет, срок действия истек, не заблокирован.

1 голос
/ 18 июля 2011

Да, льготный период выше даты истечения срока действия, и если я не ошибаюсь, так оно и происходит, у вас есть срок действия 30 дней и льготный период 5. Теперь опубликуйте 30-дневный период, истекший пользователем, и теперь введите льготный период, который является значительным с момента первого входа в систему после 30-дневного лимита. Теперь за эти 5 дней у вас есть возможность сменить пароль.

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

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

0 голосов
/ 11 сентября 2015

Относительно пункта 3: По нашему опыту, ODP.Net не генерирует исключение и не запускает OracleInfoMessageEventHandler при возникновении ORA-28002. Поиски в Google показывают только, что это ошибка в ODP, но нет ссылки на ее исправление.

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

create or replace function GetExpDate(vUser in varchar2) return DATE
AUTHID DEFINER
as
expDate date;
begin
   select nvl(expiry_date, sysdate+100) 
   into expDate 
   from dba_users
   where username = vUser;

   return expDate;

exception
when others then
   return sysdate+100;
end; 

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

...