Para usar JDBC para cambiar la contraseña de un usuario de Oracle, debe hacer dos cosas:
- coloque la contraseña directamente en la cadena SQL (no se pueden usar parámetros de vinculación),
- deshabilitar el procesamiento de escape.
No puede usar variables de vinculación porque el nombre de usuario y la contraseña no se envían a la base de datos como cadenas entre comillas simples.
El ?
en la cadena SQL se toma como un marcador de posición de variable de vinculación, y debido a esto, la cadena SQL está siendo alterada en algún momento por Oracle JDBC. Deshabilitar el procesamiento de escape en la declaración evita que esto suceda. Prueba:
Statement s = conn.createStatement();
s.setEscapeProcessing(false);
s.executeUpdate("ALTER user Stephen identified by \"newPassword?\" replace \"oldPassword\"");
Si está configurando la contraseña mediante programación, su código también debe garantizar que las contraseñas nueva y anterior no contengan ningún "
caracteres, para evitar la inyección de SQL.