代码之家  ›  专栏  ›  技术社区  ›  Miguel Lopes Martins

密码过期时通过ODBC连接到Oracle

  •  1
  • Miguel Lopes Martins  · 技术社区  · 7 年前

    我们公司有一个C++库,它在内部使用ODBC API,尤其是SQLConnect函数来连接到我们的Oracle数据库。

    但是,让我们假设我将一个用户的密码(使用PL/SQL Developer等外部工具)设置为过期。突然,以下调用失败。。。

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

    。。。返回代码为-1(这是理所当然的)。

    我的问题是:是否可以允许同一个用户通过SQLConnect(或其他ODBC功能)临时连接到我们的Oracle数据库,唯一目的是更改他们的密码?也就是说,无需以SYSDBA或类似身份连接。。。

    2 回复  |  直到 7 年前
        1
  •  1
  •   Miguel Lopes Martins    7 年前

    我们得出的结论是,不存在ODBC函数,当用户被标记为过期时,ODBC函数会更改用户的密码;ODBC API虽然本身功能强大,但不足以实现这一目的。

    因此,我们采取了不同的方法:因为我们使用的是Oracle 11g,而且我们的机器上安装了Oracle Instant Client,所以我们采用了OCI(Oracle调用接口),特别是其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);
    

    当然,可能还有其他几种选择,例如创建一个功能性数据库用户并使用该用户更改另一个用户的密码,但这种方法很好地工作。

        2
  •  0
  •   Niederee    4 年前

    密码过期并引发错误后重置密码 ORA-28001: the password has expired 我在SQL*Plus中更改它

    从命令行启动Sql Plus:

    sqlplus username/password@host:port/service
    

    然后,系统将提示您设置新密码。
    更新您的DSN,您就一切就绪了。 enter image description here