Oracle
 sql >> Base de données >  >> RDS >> Oracle

Modifier le mot de passe utilisateur via jdbc. Problèmes avec les laissez-passer contenant des points d'interrogation

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.