Im folgenden Beispiel legen wir als Benutzer 'hs' die Tabelle 't_author' an:
test=# CREATE TABLE t_author (id int4, name text); CREATE TABLE test=# REVOKE ALL ON t_author FROM autor; REVOKE
Mit REVOKE ALL entziehen wir dem Nutzer alle Rechte auf eine Tabelle. Das führt dazu, dass dieser Benutzer nicht mehr in der Lage ist, Daten aus der Tabelle abzufragen:
test=> SELECT current_user; current_user -------------- autor (1 row) test=> SELECT * FROM t_author; ERROR: permission denied for relation t_author
REVOKE ALL entzieht dem Benutzer alle Rechte - es kann jedoch sein, dass man etwas selektiver vorgehen will. PostgreSQL unterstützt sieben verschiedene Rechte:
Im Vergleich zu Oracle ist die Rechteliste von PostgreSQL geradezu lächerlich. Diese Schlichtheit hat aber auch gigantische Vorteile: Die Konfiguration einer 'sicheren' Datenbank geht sehr schnell von der Hand. Der Benutzer muss dabei nicht auf sinnvolle Features verzichten - erspart sich aber auch die Notwendigkeit, sich in der Vielzahl der Konfigurationsmöglichkeiten zu verirren.
Wollen wir dem Benutzer die Rechte wieder zurückgeben, können wir GRANT verwenden:
test=# \h GRANT
Command: GRANT
Description: define access privileges
Syntax:
GRANT { { SELECT | INSERT | UPDATE | DELETE | RULE | REFERENCES | TRIGGER }
[,...] | ALL [ PRIVILEGES ] }
ON [ TABLE ] tablename [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { CREATE | TEMPORARY | TEMP } [,...] | ALL [ PRIVILEGES ] }
ON DATABASE dbname [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
ON FUNCTION funcname ([type, ...]) [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
ON LANGUAGE langname [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { { CREATE | USAGE } [,...] | ALL [ PRIVILEGES ] }
ON SCHEMA schemaname [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
GRANT { CREATE | ALL [ PRIVILEGES ] }
ON TABLESPACE tablespacename [, ...]
TO { username | GROUP groupname | PUBLIC } [, ...] [ WITH GRANT OPTION ]
Wenn wir also dem Benutzer 'autor' das Recht 'SELECT' zurückgeben wollen, führen wir als User 'hs' das folgende Statement durch:
test=# GRANT SELECT ON t_author TO autor; GRANT
Obwohl die Tabelle leer ist, wird PostgreSQL einen Fehler werfen:
test=> UPDATE t_author SET id = id + 1; ERROR: permission denied for relation t_author
Wir haben dem Benutzer zwar das Recht 'SELECT' zugewiesen - auf das Recht 'UPDATE' haben wir allerdings verzichtet.
http://www.postgresql.at