Signatur
Beschreibung
oci_password_change() ermöglicht es, das Passwort eines Oracle-Datenbankbenutzers direkt über eine aktive OCI8-Verbindung zu ändern. Dies ist besonders nützlich, wenn ein Benutzer sich mit einem abgelaufenen Passwort anmeldet und das Passwort im selben Schritt erneuert werden muss.
Die Funktion kann in zwei Modi verwendet werden: Entweder wird eine bereits bestehende Verbindungsressource übergeben, oder man gibt als erstes Argument einen Verbindungsstring (Datenbank-DSN) an, wodurch eine neue Verbindung mit dem alten Passwort hergestellt und das Passwort gleichzeitig geändert wird. Letzteres ist besonders praktisch bei abgelaufenen Passwörtern, bei denen eine normale Verbindung schon fehlschlagen würde.
Die Passwortänderung erfolgt mit den Rechten des übergebenen Benutzers selbst – es sind keine DBA-Privilegien erforderlich. Oracle erzwingt dabei die konfigurierten Passwortrichtlinien (Mindestlänge, Komplexität etc.), die in der Datenbank hinterlegt sind.
Diese Funktion gehört zur OCI8-Erweiterung und setzt voraus, dass PHP mit Oracle-Unterstützung kompiliert wurde (--with-oci8).
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | resource|string | Eine gültige OCI8-Verbindungsressource (zurückgegeben von oci_connect(), oci_pconnect() oder oci_new_connect()) oder ein Verbindungsstring (z. B. '//localhost/XE'), wenn gleichzeitig eine neue Verbindung hergestellt werden soll. |
|
| $username Pflicht | string | Der Oracle-Benutzername, dessen Passwort geändert werden soll. | |
| $old_password Pflicht | string | Das aktuell gültige (ggf. abgelaufene) Passwort des Benutzers. | |
| $new_password Pflicht | string | Das neue Passwort, das gesetzt werden soll. Muss den Oracle-Passwortrichtlinien der Datenbank entsprechen. |
Rückgabewert
true bei Erfolg zurück. Im Fehlerfall wird false zurückgegeben und ein OCI8-Fehler kann über oci_error() abgerufen werden.Beispiele
Passwort über bestehende Verbindung ändern
<?php
$conn = oci_connect('myuser', 'altesPasswort123', '//localhost/XEPDB1');
if (!$conn) {
$err = oci_error();
trigger_error('Verbindung fehlgeschlagen: ' . $err['message'], E_USER_ERROR);
}
$result = oci_password_change($conn, 'myuser', 'altesPasswort123', 'NeuesPasswort456!');
if ($result) {
echo 'Passwort wurde erfolgreich geändert.';
} else {
$err = oci_error($conn);
echo 'Fehler beim Ändern des Passworts: ' . $err['message'];
}
oci_close($conn);
Passwort bei abgelaufener Verbindung ändern (ohne vorherige Verbindung)
<?php
// Verbindungsstring statt Ressource übergeben – ideal bei abgelaufenem Passwort
$result = oci_password_change(
'//oraclehost:1521/XEPDB1',
'myuser',
'abgelaufenPasswort!',
'NeuesPasswort789#'
);
if ($result) {
echo 'Passwort erfolgreich erneuert. Bitte erneut anmelden.';
} else {
$err = oci_error();
echo 'Passwortänderung fehlgeschlagen: ' . htmlspecialchars($err['message']);
}
// Wichtig · Fallstricke
Sicherheitshinweise:
- Das alte und neue Passwort sollten niemals in Logs, Fehlermeldungen oder Ausgaben erscheinen. Achte darauf, dass
display_errorsin Produktivumgebungen deaktiviert ist. - Das neue Passwort sollte serverseitig auf Mindestanforderungen geprüft werden, bevor es an Oracle übergeben wird, um aussagekräftige Fehlermeldungen ohne Oracle-Internansichten zu liefern.
- Oracle-Passwortrichtlinien (Profil-Einschränkungen wie
PASSWORD_VERIFY_FUNCTION) werden serverseitig erzwungen – eine fehlgeschlagene Änderung deutet meist auf Richtlinienverletzungen hin. - Die Funktion setzt die installierte OCI8-Erweiterung voraus. Prüfe mit
phpinfo()oderextension_loaded('oci8'), ob sie verfügbar ist.