Signatur
Beschreibung
db2_table_privileges() fragt den Datenbankkatalog ab und gibt eine Ergebnis-Ressource zurück, die Informationen über die Zugriffsrechte (Privileges) für Tabellen in der angegebenen Datenbank enthält. Die Ergebnismenge kann anschließend mit db2_fetch_assoc(), db2_fetch_array() oder ähnlichen Fetch-Funktionen zeilenweise ausgelesen werden.
Die Funktion ist besonders nützlich, wenn man programmatisch prüfen möchte, welche Datenbankbenutzer welche Rechte (z. B. SELECT, INSERT, UPDATE, DELETE, REFERENCES, INDEX, ALTER) auf bestimmte Tabellen besitzen. Dies eignet sich für Administrations- und Audit-Werkzeuge sowie für dynamische Sicherheitsprüfungen innerhalb einer Anwendung.
Die Parameter qualifier, schema und table_name wirken als Filter: Werden sie als null übergeben, werden alle entsprechenden Einträge zurückgeliefert. Bei der Angabe von schema und table_name können SQL-Suchmuster mit den Platzhaltern % (beliebige Zeichenfolge) und _ (genau ein Zeichen) verwendet werden.
Die zurückgegebene Ergebnis-Ressource enthält folgende Spalten: TABLE_CAT, TABLE_SCHEM, TABLE_NAME, GRANTOR, GRANTEE, PRIVILEGE und IS_GRANTABLE.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $connection Pflicht | resource | Eine aktive DB2-Datenbankverbindung, die mit db2_connect() oder db2_pconnect() erstellt wurde. |
|
| $qualifier | string | null | Der Qualifier (Katalogname) für DB2-Datenbanken auf OS/390- oder z/OS-Systemen. Für andere Datenbanksysteme null oder einen leeren String übergeben. |
| $schema | string | null | Der Name des Datenbankschemas, auf das die Suche eingeschränkt werden soll. SQL-Suchmuster (%, _) sind erlaubt. Bei null werden alle Schemata berücksichtigt. |
| $table_name | string | null | Der Name der Tabelle, für die Rechte abgefragt werden sollen. SQL-Suchmuster (%, _) sind erlaubt. Bei null werden alle Tabellen berücksichtigt. |
Rückgabewert
db2_fetch_*()-Funktionen ausgelesen werden kann. Im Fehlerfall wird false zurückgegeben.Beispiele
Alle Tabellen-Rechte eines Schemas auflisten
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');
if ($conn) {
$result = db2_table_privileges($conn, null, 'DB2ADMIN', null);
if ($result) {
echo sprintf(
"%-30s %-15s %-15s %-15s %-15s\n",
'Tabelle', 'Berechtigter', 'Recht', 'Erteilt von', 'Weitergabe'
);
echo str_repeat('-', 95) . "\n";
while ($row = db2_fetch_assoc($result)) {
echo sprintf(
"%-30s %-15s %-15s %-15s %-15s\n",
$row['TABLE_NAME'],
$row['GRANTEE'],
$row['PRIVILEGE'],
$row['GRANTOR'],
$row['IS_GRANTABLE']
);
}
} else {
echo 'Fehler beim Abfragen der Tabellenrechte.';
}
db2_close($conn);
} else {
echo 'Verbindung fehlgeschlagen: ' . db2_conn_errormsg();
}
Rechte einer bestimmten Tabelle prüfen
<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');
if ($conn) {
$tableName = 'ORDERS';
$result = db2_table_privileges($conn, null, 'DB2ADMIN', $tableName);
$privileges = [];
if ($result) {
while ($row = db2_fetch_assoc($result)) {
if ($row['GRANTEE'] === 'APPUSER') {
$privileges[] = $row['PRIVILEGE'];
}
}
}
if (in_array('SELECT', $privileges)) {
echo "Benutzer APPUSER hat SELECT-Recht auf Tabelle {$tableName}.";
} else {
echo "Benutzer APPUSER hat KEIN SELECT-Recht auf Tabelle {$tableName}.";
}
db2_close($conn);
}
// Wichtig · Fallstricke
Erweiterung erforderlich: Diese Funktion setzt die PHP-Erweiterung ibm_db2 voraus, die standardmäßig nicht in PHP enthalten ist und separat installiert werden muss.
Sicherheitshinweis: Informationen über Datenbankrechte sind sicherheitsrelevant. Die Ausgabe von db2_table_privileges() sollte niemals ungefiltert an Endbenutzer ausgegeben werden, da sie Rückschlüsse auf die Datenbankstruktur und Berechtigungsmodelle ermöglicht.
Groß-/Kleinschreibung: Schema- und Tabellennamen werden auf DB2-Systemen in der Regel in Großbuchstaben gespeichert. Achte darauf, die Parameter entsprechend anzupassen, da sonst keine Treffer gefunden werden.