För att använda JDBC för att ändra lösenordet för en Oracle-användare måste du göra två saker:
- lägg lösenordet direkt i SQL-strängen (bindningsparametrar kan inte användas),
- inaktivera escape-bearbetning.
Du kan inte använda bindningsvariabler eftersom användarnamnet och lösenordet inte skickas till databasen som strängar med citattecken.
?
i SQL-strängen tas som en bindningsvariabel platshållare, och på grund av detta blir SQL-strängen manglad någon gång av Oracle JDBC. Om du inaktiverar escape-bearbetning på uttalandet stoppas detta från att hända. Försök:
Statement s = conn.createStatement();
s.setEscapeProcessing(false);
s.executeUpdate("ALTER user Stephen identified by \"newPassword?\" replace \"oldPassword\"");
Om du ställer in lösenordet programmatiskt bör din kod också säkerställa att de nya och gamla lösenorden inte innehåller någon "
tecken, för att undvika SQL-injektion.