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

时间:2018-05-04 16:08:46

标签: c++ oracle oracle11g odbc

我们公司有一个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 个答案:

答案 0 :(得分:0)

我们得出的结论是,当所述用户被标记为已过期时,不存在任何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);

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

答案 1 :(得分:0)

要在密码过期后重置密码并引发错误ORA-28001: the password has expired,请在SQL * Plus中进行更改

从命令行启动Sql Plus:

sqlplus username/password@host:port/service

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