我们公司有一个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或类似的......
答案 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)