Um JDBC zum Ändern des Passworts eines Oracle-Benutzers zu verwenden, müssen Sie zwei Dinge tun:
- Füge das Passwort direkt in die SQL-Zeichenfolge ein (Bind-Parameter können nicht verwendet werden),
- Escape-Verarbeitung deaktivieren.
Sie können keine Bind-Variablen verwenden, da der Benutzername und das Passwort nicht als Zeichenfolgen in einfachen Anführungszeichen an die Datenbank gesendet werden.
Der ?
in der SQL-Zeichenfolge wird als Platzhalter für eine Bind-Variable verwendet, und aus diesem Grund wird die SQL-Zeichenfolge irgendwann von Oracle JDBC verstümmelt. Das Deaktivieren der Escape-Verarbeitung für die Anweisung verhindert, dass dies geschieht. Versuchen Sie:
Statement s = conn.createStatement();
s.setEscapeProcessing(false);
s.executeUpdate("ALTER user Stephen identified by \"newPassword?\" replace \"oldPassword\"");
Wenn Sie das Passwort programmgesteuert festlegen, sollte Ihr Code auch sicherstellen, dass das neue und das alte Passwort keinen "
enthalten Zeichen, um SQL-Injection zu vermeiden.