Informationen über alle Datenbanken werden automatisch in einer Gruppe von Tabellen, dem sog. Systemkatalog, gepflegt, die beim Generieren der Datenbank erstellt werden. Dieser Systemkatalog beschreibt Tabellen, Spalten, Indizes, Programme, Zugriffsrechte und andere Objekte.
In sechs dieser Sichten werden die Zugriffsrechte von Benutzern und die Identität des Benutzers, der das Zugriffsrecht jeweils erteilt, aufgelistet:
Zugriffsrechte, die den Benutzern vom System verliehen wurden, weisen in der Spalte GRANTOR den Wert SYSIBM auf. SYSADM, SYSMAINT und SYSCTRL werden nicht im Systemkatalog aufgelistet.
Durch die Anweisungen CREATE und GRANT werden Zugriffsrechte in den Systemkatalog eingetragen. Benutzer mit den Berechtigungen SYSADM und DBADM können Zugriffsrechte SELECT für die Systemkatalogsichten erteilen und widerrufen. Die folgenden Beispiele zeigen, wie durch Verwendung von SQL-Abfragen Informationen über Zugriffsrechte abgerufen werden können:
Keine einzelne Systemkatalogsicht enthält Informationen über alle Zugriffsrechte. Die folgende Anweisung ruft alle Berechtigungsnamen mit Zugriffsrechten ab:
SELECT DISTINCT GRANTEE, GRANTEETYPE, 'DATABASE' FROM SYSCAT.DBAUTH UNION SELECT DISTINCT GRANTEE, GRANTEETYPE, 'TABLE ' FROM SYSCAT.TABAUTH UNION SELECT DISTINCT GRANTEE, GRANTEETYPE, 'PACKAGE ' FROM SYSCAT.PACKAGEAUTH UNION SELECT DISTINCT GRANTEE, GRANTEETYPE, 'INDEX ' FROM SYSCAT.INDEXAUTH UNION SELECT DISTINCT GRANTEE, GRANTEETYPE, 'COLUMN ' FROM SYSCAT.COLAUTH UNION SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SCHEMA ' FROM SYSCAT.SCHEMAAUTH UNION SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SERVER ' FROM SYSCAT.PASSTHRUAUTH ORDER BY GRANTEE, GRANTEETYPE, 3
Die durch diese Anweisung abgerufene Liste sollte in regelmäßigen Abständen mit Listen von Benutzer- und Gruppennamen verglichen werden, die in der Sicherheitseinrichtung des Systems definiert sind. Auf diese Weise können die Berechtigungsnamen ermittelt werden, die nicht mehr gültig sind.
Anmerkung: | Wenn Sie ferne Datenbank-Clients unterstützen, ist der Berechtigungsname möglicherweise nur auf dem fernen Client und nicht auf Ihrem Datenbank-Server-System definiert. |
Die folgende Anweisung ruft alle Berechtigungsnamen ab, denen die Berechtigung DBADM direkt erteilt wurde:
SELECT DISTINCT GRANTEE FROM SYSCAT.DBAUTH WHERE DBADMAUTH = 'Y'
Die folgende Anweisung ruft alle Berechtigungsnamen ab, die direkt zum Zugriff auf die Tabelle EMPLOYEE mit dem Qualifikationsmerkmal JAMES berechtigt sind:
SELECT DISTINCT GRANTEETYPE, GRANTEE FROM SYSCAT.TABAUTH WHERE TABNAME = 'EMPLOYEE' AND TABSCHEMA = 'JAMES' UNION SELECT DISTINCT GRANTEETYPE, GRANTEE FROM SYSCAT.COLAUTH WHERE TABNAME = 'EMPLOYEE' AND TABSCHEMA = 'JAMES'
Sie können herauszufinden, wer die Tabelle EMPLOYEE mit dem Qualifikationsmerkmal JAMES aktualisieren kann, indem Sie die folgende Anweisung ausführen:
SELECT DISTINCT GRANTEETYPE, GRANTEE FROM SYSCAT.TABAUTH WHERE TABNAME = 'EMPLOYEE' AND TABSCHEMA = 'JAMES' AND (CONTROLAUTH = 'Y' OR UPDATEAUTH = 'Y' OR UPDATEAUTH = 'G') UNION SELECT DISTINCT GRANTEETYPE, GRANTEE FROM SYSCAT.DBAUTH WHERE DBADMAUTH = 'Y' UNION SELECT DISTINCT GRANTEETYPE, GRANTEE FROM SYSCAT.COLAUTH WHERE TABNAME = 'EMPLOYEE' AND TABSCHEMA = 'JAMES' AND PRIVTYPE = 'U'
Hierdurch werden alle Berechtigungsnamen mit der Berechtigung DBADM sowie die Namen, denen die Zugriffsrechte CONTROL oder UPDATE direkt erteilt wurden, abgerufen. Allerdings werden die Berechtigungsnamen von Benutzern, die nur über die Berechtigung SYSADM verfügen, nicht zurückgegeben.
Es ist zu beachten, daß einige Berechtigungsnamen Gruppen sein können, nicht nur Einzelbenutzer.
Durch Abfragen der Systemkatalogsichten können Benutzer eine Liste der Zugriffsrechte, über die sie verfügen, und eine Liste der Zugriffsrechte, die sie anderen Benutzern erteilt haben, abrufen. Beispielsweise wird durch die folgende Anweisung eine Liste der Datenbankzugriffsrechte abgerufen, die direkt einem einzelnen Berechtigungsnamen erteilt wurden:
SELECT * FROM SYSCAT.DBAUTH WHERE GRANTEE = USER AND GRANTEETYPE = 'U'
Mit der folgenden Anweisung wird eine Liste der Tabellenzugriffsrechte abgerufen, die direkt von einem bestimmten Benutzer erteilt wurden:
SELECT * FROM SYSCAT.TABAUTH WHERE GRANTOR = USER
Mit der folgenden Anweisung wird eine Liste der einzelnen Spaltenzugriffsrechte abgerufen, die direkt von einem bestimmten Benutzer erteilt wurden
SELECT * FROM SYSCAT.COLAUTH WHERE GRANTOR = USER
Das Schlüsselwort USER in diesen Anweisungen ist immer gleich dem Wert des Berechtigungsnamens eines Benutzers. USER ist ein Sonderregister mit Lesezugriff. Weitere Informationen zu Sonderregistern finden Sie im Handbuch SQL Reference.
Während der Datenbankerstellung wird das Zugriffsrecht SELECT für die Systemkatalogsichten der Gruppe PUBLIC erteilt. (Hinweise zu anderen Zugriffsrechten, die automatisch der Gruppe PUBLIC erteilt werden, finden Sie in Zugriffsrechte für Datenbanken.) In den meisten Fällen stellt dies kein Sicherheitsproblem dar. Bei sehr sensiblen Daten kann es jedoch zu Problemen kommen, da in diesen Tabellen jedes Objekt der Datenbank beschrieben wird. Wenn dies der Fall ist, kann das Zugriffsrecht SELECT für PUBLIC widerrufen werden. Anschließend kann das Zugriffsrecht SELECT nach Bedarf bestimmten Benutzern erteilt werden. Das Erteilen und Widerrufen des Zugriffsrechts SELECT für die Systemkatalogsichten erfolgt genauso wie für jede andere Sicht, aber Sie benötigen dafür die Berechtigung SYSADM oder DBADM.
Sie sollten zumindest die Beschränkung des Zugriffs auf die folgenden Katalogsichten erwägen:
Dadurch wird verhindert, daß Informationen über Zugriffsrechte von Benutzern, über die ein Berechtigungsname für den unbefugten Zugriff ermittelt werden könnte, für alle Benutzer mit Zugriff auf die Datenbank verfügbar werden.
Sie sollten auch die Spalten überprüfen, für die die Statistikdaten gesammelt wurden (siehe Kapitel 24, Systemkatalogstatistiken). Einige der im Systemkatalog aufgezeichneten Statistikdaten könnten Datenwerte enthalten, die in Ihrer Umgebung sensible Informationen darstellen. Wenn diese Statistikdaten sensible Daten enthalten, können Sie das Zugriffsrecht SELECT auf die Katalogsichten SYSCAT.COLUMNS und SYSCAT.COLDIST für PUBLIC widerrufen.
Wenn Sie den Zugriff auf die Systemkatalogsichten beschränken möchten, können Sie Sichten definieren, damit jeder Berechtigungsname Informationen über seine eigenen Zugriffsrechte abrufen kann.
Zum Beispiel enthält die folgende Sicht MYSELECTS den Eigner und den Namen jeder Tabelle, für die dem Berechtigungsnamen eines Benutzers direkt das Zugriffsrecht SELECT erteilt wurde:
CREATE VIEW MYSELECTS AS SELECT TABSCHEMA, TABNAME FROM SYSCAT.TABAUTH WHERE GRANTEETYPE = 'U' AND GRANTEE = USER AND SELECTAUTH = 'Y'
Das Schlüsselwort USER in dieser Anweisung ist immer gleich dem Wert des Berechtigungsnamens.
Mit der folgenden Anweisung wird die Sicht für jeden Berechtigungsnamen verfügbar gemacht:
GRANT SELECT ON TABLE MYSELECTS TO PUBLIC
Außerdem sollten Sie nicht vergessen, das Zugriffsrecht SELECT für die Basistabelle zu widerrufen:
REVOKE SELECT ON TABLE SYSCAT.TABAUTH FROM PUBLIC