Pour utiliser JDBC pour changer le mot de passe d'un utilisateur Oracle, vous devez faire deux choses :
- mettez le mot de passe directement dans la chaîne SQL (les paramètres de liaison ne peuvent pas être utilisés),
- désactiver le traitement d'échappement.
Vous ne pouvez pas utiliser de variables de liaison car le nom d'utilisateur et le mot de passe ne sont pas envoyés à la base de données sous forme de chaînes entre guillemets simples.
Le ?
dans la chaîne SQL est considérée comme un espace réservé de variable de liaison, et à cause de cela, la chaîne SQL est mutilée à un moment donné par Oracle JDBC. La désactivation du traitement d'échappement sur l'instruction empêche que cela se produise. Essayez :
Statement s = conn.createStatement();
s.setEscapeProcessing(false);
s.executeUpdate("ALTER user Stephen identified by \"newPassword?\" replace \"oldPassword\"");
Si vous définissez le mot de passe par programme, votre code doit également garantir que les nouveaux et anciens mots de passe ne contiennent aucun "
caractères, pour éviter l'injection SQL.