JDBCを使用してOracleユーザーのパスワードを変更するには、次の2つのことを行う必要があります。
- パスワードをSQL文字列に直接入力します(バインドパラメータは使用できません)。
- エスケープ処理を無効にします。
ユーザー名とパスワードは一重引用符で囲まれた文字列としてデータベースに送信されないため、バインド変数を使用することはできません。
?コード> SQL文字列のはバインド変数プレースホルダーとして使用されているため、SQL文字列はある時点でOracleJDBCによってマングルされています。ステートメントでエスケープ処理を無効にすると、これが発生しなくなります。試してみてください:
Statement s = conn.createStatement();
s.setEscapeProcessing(false);
s.executeUpdate("ALTER user Stephen identified by \"newPassword?\" replace \"oldPassword\"");
プログラムでパスワードを設定する場合は、コードで新旧のパスワードに"
が含まれていないことも確認する必要があります。 SQLインジェクションを回避するための文字。