【发布时间】:2011-05-29 22:14:39
【问题描述】:
当密码包含问号字符时,我在更改用户密码时遇到问题。到目前为止,我没有遇到任何其他字符的这个问题,它似乎是问号字符特有的。
如果我使用以下 sql 在 sqlplus 中更改用户密码:
Alter user Stephen identifed by "NewPassword?" REPLACE "OldPassword";
然后它成功更改了密码,我可以使用新密码“NewPassword?”登录。
但是,如果我通过 jdbc 执行相同的 SQL:
final String query = "ALTER user Stephen identified by \"NewPassword?\" REPLACE \"OldPassword\"";
stmt.executeUpdate(query);
然后我无法使用通行证“NewPassword?”登录。
通过 sqlplus 和 jdbc 输入时检查密码的哈希码表明它们是不同的。 不知何故,当我在 jdbc 中运行该语句时,它输入的不是 'NewPassword?'。
我似乎对以下密码没有任何问题:
新密码,新密码\,新密码'。这似乎只是导致问题的问号。
调试显示问号的代码点 (dec) 为 63,因此它看起来不像中途更改。
有谁知道是什么导致了这种行为? 我现在很茫然,我正在考虑阻止带问号的通过来绕过这个问题。
【问题讨论】:
-
哪个数据库版本?哪个 JDBC 驱动程序版本?
stmt.getClass().getName()说什么? -
对不起,我应该在一开始就提到这一点。 db version = Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production, driver version = 10.2.0.4.0, stmt.getClass().getName() = oracle_jdbc_driver_T4CStatement_Proxy