Signatur
Beschreibung
pg_change_password() ändert das Passwort eines bestehenden PostgreSQL-Datenbankbenutzers. Die Funktion sendet intern einen ALTER USER-Befehl an den Server und übernimmt dabei die korrekte Formatierung und das Escaping des Passworts, sodass keine manuelle Zeichenketten-Interpolation notwendig ist.
Die Funktion ist besonders nützlich in Administrationsskripten oder Benutzer-Management-Modulen, bei denen Passwörter programmatisch geändert werden müssen. Da das Passwort intern sicher übergeben wird, ist das Risiko einer SQL-Injection deutlich geringer als bei einer manuell aufgebauten ALTER USER-Abfrage.
Voraussetzung ist, dass der über $connection angemeldete Datenbankbenutzer über ausreichende Rechte verfügt, das Passwort des angegebenen Benutzers zu ändern. Superuser können das Passwort beliebiger Benutzer ändern; normale Benutzer können in der Regel nur ihr eigenes Passwort ändern.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | PgSql\Connection | Eine aktive PostgreSQL-Verbindungsinstanz, die z. B. von pg_connect() oder pg_pconnect() zurückgegeben wurde. |
|
| $user Pflicht | string | Der Name des PostgreSQL-Benutzers, dessen Passwort geändert werden soll. | |
| $password Pflicht | string | Das neue Klartext-Passwort für den angegebenen Benutzer. Die Funktion übernimmt die sichere Übergabe an den Server. |
Rückgabewert
true zurück, wenn das Passwort erfolgreich geändert wurde, andernfalls false. Im Fehlerfall (z. B. fehlende Rechte oder ungültiger Benutzername) wird false zurückgegeben.Beispiele
Passwort eines Benutzers ändern
<?php
$conn = pg_connect('host=localhost dbname=mydb user=postgres password=secret');
if (!$conn) {
die('Verbindung fehlgeschlagen.');
}
$user = 'webapp_user';
$newPassword = 'sicheresNeuesPasswort!42';
if (pg_change_password($conn, $user, $newPassword)) {
echo "Passwort für Benutzer '$user' erfolgreich geändert.";
} else {
echo "Fehler: Passwort konnte nicht geändert werden.";
}
pg_close($conn);
Eigenes Passwort im Benutzerbereich ändern
<?php
// Der eingeloggte DB-Nutzer ändert sein eigenes Passwort
$conn = pg_connect('host=localhost dbname=mydb user=webapp_user password=altesPasswort');
if (!$conn) {
die('Verbindung fehlgeschlagen.');
}
// Neues Passwort stammt z. B. aus einem validierten Formular
$newPassword = $_POST['new_password'] ?? '';
if (empty($newPassword)) {
die('Kein Passwort angegeben.');
}
$result = pg_change_password($conn, 'webapp_user', $newPassword);
if ($result) {
echo 'Ihr Passwort wurde erfolgreich aktualisiert.';
} else {
echo 'Das Passwort konnte nicht geändert werden. Bitte prüfen Sie Ihre Berechtigungen.';
}
pg_close($conn);
// Wichtig · Fallstricke
Sicherheitshinweis: Das neue Passwort wird als Klartext an die Funktion übergeben. Stellen Sie sicher, dass die Datenbankverbindung über SSL/TLS verschlüsselt ist (Parameter sslmode=require in der Verbindungszeichenkette), um das Passwort vor dem Abfangen im Netzwerk zu schützen.
Berechtigungen: Normale Benutzer können in der Regel nur ihr eigenes Passwort ändern. Versucht ein Benutzer ohne ausreichende Rechte, das Passwort eines anderen Benutzers zu ändern, schlägt die Funktion fehl und gibt false zurück.
Passwort-Validierung: Führen Sie vor dem Aufruf eine serverseitige Validierung des neuen Passworts durch (Länge, Komplexität), um schwache Passwörter zu verhindern. Die Funktion selbst nimmt keine Bewertung der Passwortstärke vor.