Start · Sprachen · PHP · Referenz · db2_table_privileges

db2_table_privileges

Funktion

Liefert ein Ergebnis-Ressource mit Informationen über Tabellen und die zugehörigen Zugriffsrechte einer IBM DB2-, Cloudscape- oder Apache Derby-Datenbank.

seit PHP 5.1.0 Kategorie: db

Signatur

db2_table_privileges(resource $connection, string $qualifier = null, string $schema = null, string $table_name = null): resource|false

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

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine Ergebnis-Ressource zurück, die mit den üblichen 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();
}
Tabelle Berechtigter Recht Erteilt von Weitergabe ----------------------------------------------------------------------------------------------- ORDERS PUBLIC SELECT DB2ADMIN YES CUSTOMERS APPUSER INSERT DB2ADMIN NO CUSTOMERS APPUSER SELECT DB2ADMIN NO

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);
}
Benutzer APPUSER hat SELECT-Recht auf Tabelle ORDERS.

// 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.