Start · Sprachen · PHP · Referenz · db2_column_privileges

db2_column_privileges

Funktion

Gibt ein Ergebnis-Handle zurück, das die Spalten einer Tabelle und die darauf gesetzten Zugriffsrechte (Privileges) auflistet.

seit PHP 5.1.0 Kategorie: db

Signatur

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

Beschreibung

db2_column_privileges() fragt die Datenbankmetadaten nach den Zugriffsrechten ab, die für einzelne Spalten einer Tabelle vergeben wurden. Das zurückgegebene Statement-Handle kann mit den üblichen Fetch-Funktionen (z. B. db2_fetch_assoc()) zeilenweise ausgelesen werden.

Die Funktion ist besonders nützlich, wenn man zur Laufzeit prüfen möchte, ob ein bestimmter Datenbanknutzer SELECT-, INSERT- oder UPDATE-Rechte auf einzelne Spalten besitzt – beispielsweise beim Aufbau von Administrations-Werkzeugen oder bei der Rechteverwaltung in Enterprise-Anwendungen.

Die Parameter qualifier, schema, table_name und column_name erlauben eine schrittweise Einschränkung der Suche. Alle vier können null sein (alle passenden Einträge werden geliefert) oder einen exakten Namen bzw. ein SQL-Suchmuster mit % und _ enthalten.

Das Ergebnis-Rowset enthält unter anderem die Spalten TABLE_CAT, TABLE_SCHEM, TABLE_NAME, COLUMN_NAME, GRANTOR, GRANTEE, PRIVILEGE und IS_GRANTABLE.

Parameter

Name Typ Default Beschreibung
$connection Pflicht resource Eine aktive DB2-Datenbankverbindung, wie sie von db2_connect() oder db2_pconnect() zurückgegeben wird.
$qualifier string|null null Der Katalog-Qualifier (bei DB2 unter z/OS oder iSeries) oder null, um keinen Katalog zu filtern. Unter LUW-Systemen wird dieser Parameter meist auf null gesetzt.
$schema string|null null Der Name des Datenbankschemas, dessen Tabellen berücksichtigt werden sollen. Unterstützt SQL-Suchmuster (%, _). null liefert alle Schemata.
$table_name string|null null Der Name der Tabelle, für die Spaltenrechte abgefragt werden sollen. Unterstützt SQL-Suchmuster (%, _). null liefert alle Tabellen.
$column_name string|null null Der Name der Spalte, für die Rechte abgefragt werden sollen. Unterstützt SQL-Suchmuster (%, _). null liefert alle Spalten der gefundenen Tabellen.

Rückgabewert

Typ
resource|false
Beschreibung
Bei Erfolg ein Statement-Handle (resource), das mit db2_fetch_assoc(), db2_fetch_array() o. ä. ausgelesen werden kann. Schlägt der Aufruf fehl, wird false zurückgegeben.

Beispiele

Alle Spaltenrechte einer bestimmten Tabelle ausgeben

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');

if ($conn) {
    $result = db2_column_privileges($conn, null, 'DB2ADMIN', 'EMPLOYEE', null);

    if ($result) {
        while ($row = db2_fetch_assoc($result)) {
            printf(
                "Spalte: %-20s | Recht: %-10s | Grantee: %-15s | Grantable: %s\n",
                $row['COLUMN_NAME'],
                $row['PRIVILEGE'],
                $row['GRANTEE'],
                $row['IS_GRANTABLE']
            );
        }
    } else {
        echo 'Fehler beim Abrufen der Spaltenrechte.';
    }

    db2_close($conn);
}
Spalte: EMPNO | Recht: SELECT | Grantee: PUBLIC | Grantable: YES Spalte: FIRSTNME | Recht: SELECT | Grantee: PUBLIC | Grantable: YES Spalte: SALARY | Recht: SELECT | Grantee: MANAGER | Grantable: NO

Rechte für eine bestimmte Spalte per Muster suchen

<?php
$conn = db2_connect('SAMPLE', 'db2user', 'secret');

if ($conn) {
    // Alle Spalten, deren Name mit 'SAL' beginnt, in allen Tabellen des Schemas
    $result = db2_column_privileges($conn, null, 'DB2ADMIN', '%', 'SAL%');

    if ($result) {
        while ($row = db2_fetch_assoc($result)) {
            echo $row['TABLE_NAME'] . '.' . $row['COLUMN_NAME']
                . ' => ' . $row['PRIVILEGE']
                . ' für ' . $row['GRANTEE'] . PHP_EOL;
        }
    }

    db2_close($conn);
}
EMPLOYEE.SALARY => SELECT für MANAGER EMPLOYEE.SALARY => UPDATE für HRAPP

// Wichtig · Fallstricke

Treiber-Voraussetzung: Diese Funktion steht nur zur Verfügung, wenn die ibm_db2-Erweiterung geladen ist (extension=ibm_db2 in der php.ini). Sie ist kein Bestandteil von PDO oder anderen Datenbank-Abstraktionsschichten.

Groß-/Kleinschreibung: DB2 speichert Objekt­namen standardmäßig in Großbuchstaben. Schema- und Tabellennamen sollten daher in Großbuchstaben übergeben werden, andernfalls werden keine Ergebnisse geliefert.

Sicherheitshinweis: Die Funktion liefert nur Rechte, die der verbundene Datenbanknutzer abfragen darf. Für vollständige Audit-Zwecke ist ein Benutzer mit entsprechenden Systemrechten erforderlich.