Start · Sprachen · PHP · Referenz · odbc_tableprivileges

odbc_tableprivileges

Funktion

Gibt eine Liste von Tabellen und deren zugehörigen Zugriffsrechten aus einer ODBC-Datenquelle zurück.

seit PHP 4.0.0 Kategorie: db

Signatur

odbc_tableprivileges(resource $odbc, string $catalog, string $schema, string $table): resource|false

Beschreibung

odbc_tableprivileges() ruft über die ODBC-Schnittstelle die Berechtigungen (Privileges) ab, die für eine oder mehrere Tabellen in einer Datenbank vergeben wurden. Typische Berechtigungen sind SELECT, INSERT, UPDATE, DELETE, REFERENCES usw. Die Funktion liefert ein Ergebnis-Handle, das anschließend mit odbc_fetch_row() oder odbc_result() ausgelesen werden kann.

Die Suchparameter catalog, schema und table akzeptieren SQL-Suchmuster mit den Wildcards % (beliebig viele Zeichen) und _ (genau ein Zeichen). Ein leerer String '' schränkt die Suche auf Objekte ohne Katalog bzw. Schema ein, während % alle verfügbaren Einträge zurückliefert.

Das Ergebnis-Resultset enthält je Zeile die Spalten TABLE_CAT, TABLE_SCHEM, TABLE_NAME, GRANTOR, GRANTEE, PRIVILEGE und IS_GRANTABLE, die Auskunft darüber geben, wer welche Rechte an welcher Tabelle vergeben hat und ob der Grantee diese weiterreichen darf.

Diese Funktion ist besonders nützlich für Datenbankadministrationswerkzeuge, Sicherheits-Audits oder dynamische Anwendungen, die zur Laufzeit prüfen müssen, welche Rechte ein bestimmter Datenbankbenutzer besitzt.

Parameter

Name Typ Default Beschreibung
$odbc Pflicht resource Eine aktive ODBC-Verbindungsressource, wie sie von odbc_connect() oder odbc_pconnect() zurückgegeben wird.
$catalog Pflicht string Der Katalogname (Datenbankname). Verwende % um alle Kataloge zu durchsuchen, oder '' für Tabellen ohne Katalogzuordnung.
$schema Pflicht string Das Datenbankschema. Akzeptiert SQL-Suchmuster (%, _). Ein leerer String sucht nach Tabellen ohne Schemazuordnung.
$table Pflicht string Der Tabellenname. Akzeptiert SQL-Suchmuster (%, _). Verwende % um alle Tabellen aufzulisten.

Rückgabewert

Typ
resource|false
Beschreibung
Gibt bei Erfolg eine ODBC-Ergebnisressource zurück, die mit den üblichen ODBC-Fetch-Funktionen ausgelesen werden kann. Bei einem Fehler wird false zurückgegeben.

Beispiele

Alle Berechtigungen für eine bestimmte Tabelle auflisten

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'geheim');

if (!$conn) {
    die('Verbindung fehlgeschlagen: ' . odbc_errormsg());
}

$result = odbc_tableprivileges($conn, '%', '%', 'kunden');

if ($result === false) {
    die('Fehler beim Abrufen der Berechtigungen: ' . odbc_errormsg($conn));
}

echo str_pad('Tabelle', 20) . str_pad('Grantee', 20) . str_pad('Privilege', 15) . 'Is Grantable' . PHP_EOL;
echo str_repeat('-', 70) . PHP_EOL;

while (odbc_fetch_row($result)) {
    $tabelle   = odbc_result($result, 'TABLE_NAME');
    $grantee   = odbc_result($result, 'GRANTEE');
    $privilege = odbc_result($result, 'PRIVILEGE');
    $grantable = odbc_result($result, 'IS_GRANTABLE');

    echo str_pad($tabelle, 20)
       . str_pad($grantee, 20)
       . str_pad($privilege, 15)
       . $grantable . PHP_EOL;
}

odbc_free_result($result);
odbc_close($conn);
Tabelle Grantee Privilege Is Grantable ---------------------------------------------------------------------- kunden app_user SELECT NO kunden app_user INSERT NO kunden admin SELECT YES kunden admin DELETE YES

Sicherheits-Audit: Alle Tabellen und Rechte eines bestimmten Benutzers prüfen

<?php
$conn = odbc_connect('MeineDSN', 'benutzer', 'geheim');

// Alle Tabellen in allen Schemata abfragen
$result = odbc_tableprivileges($conn, '%', '%', '%');

if ($result === false) {
    die('Fehler: ' . odbc_errormsg($conn));
}

$zielBenutzer = 'app_user';
$rechte = [];

while (odbc_fetch_row($result)) {
    $grantee   = odbc_result($result, 'GRANTEE');
    $tabelle   = odbc_result($result, 'TABLE_NAME');
    $privilege = odbc_result($result, 'PRIVILEGE');

    if (strtolower($grantee) === strtolower($zielBenutzer)) {
        $rechte[$tabelle][] = $privilege;
    }
}

odbc_free_result($result);

echo "Berechtigungen für Benutzer '$zielBenutzer':" . PHP_EOL;
foreach ($rechte as $tabelle => $privilegien) {
    echo "  Tabelle: $tabelle => " . implode(', ', $privilegien) . PHP_EOL;
}

odbc_close($conn);
Berechtigungen für Benutzer 'app_user': Tabelle: kunden => SELECT, INSERT Tabelle: bestellungen => SELECT, INSERT, UPDATE

// Wichtig · Fallstricke

Treiber-Abhängigkeit: Das genaue Verhalten und die Verfügbarkeit der Ergebnisspalten hängen stark vom verwendeten ODBC-Treiber ab. Nicht alle Treiber unterstützen alle Spalten vollständig; insbesondere IS_GRANTABLE kann bei manchen Treibern NULL zurückliefern.

Ressourcen freigeben: Das zurückgegebene Ergebnis-Handle sollte nach der Verwendung immer mit odbc_free_result() freigegeben werden, um Speicher zu sparen – besonders bei großen Ergebnismengen oder in lang laufenden Skripten.

Wildcards: Die Parameter schema und table unterstützen SQL-Suchmuster. Wird ein leerer String '' übergeben, sucht der Treiber explizit nach Objekten ohne Katalog- bzw. Schemazuordnung – dies ist nicht dasselbe wie %.