Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

PostgreSQL: Tabellstrukturen anderer Benutzer sind sichtbar

234 views
Skip to first unread message

Peter Blancke

unread,
Sep 20, 2012, 5:34:25 AM9/20/12
to
Guten Tag,

ich bin gerade dabei, nach vieljaehriger MySQL-Taetigkeit mich mit
PostgreSQL (8.4.13 auf Debian/Squeeze) anzufreunden.

Waehrend ich in MySQL die Datenbanken anderer Benutzer nicht sehe,
sehe ich die sehr wohl bei PostgreSQL:

blancke=> \c tester
Sie sind jetzt verbunden mit der Datenbank »tester«.

tester=> \d+ tester
Tabelle »public.tester«
Spalte | Typ | Attribute | Speicherung | Beschreibung
--------+-----------------------+-----------+-------------+--------------
text | character varying(50) | | extended |
Hat OIDs: nein

Erst der Versuch, auch an die Daten der Tabelle zu kommen, scheitert
wie erwartet:

tester=> select * from tester;
FEHLER: keine Berechtigung für Relation tester

Ist das so gewollt oder habe ich da in der Konfiguration etwas noch
nicht beachtet/gekannt?

Grusz,

Peter Blancke

--
Hoc est enim verbum meum!

Bastian Blank

unread,
Sep 20, 2012, 9:09:20 AM9/20/12
to
Peter Blancke wrote:
> tester=> \d+ tester
> Tabelle »public.tester«

Du hast das "public" überlesen. Da hat jeder User erst mal Rechte drauf
zuzugreifen.

> Ist das so gewollt oder habe ich da in der Konfiguration etwas noch
> nicht beachtet/gekannt?

Ja. Du musst die Recht explizit klauen.

Bastian

Peter Blancke

unread,
Sep 20, 2012, 10:03:54 AM9/20/12
to
Am 2012-09-20, Bastian Blank <use...@waldi.eu.org> schrieb:
> Peter Blancke wrote:
>> tester=> \d+ tester
>> Tabelle »public.tester«

> Du hast das "public" überlesen. Da hat jeder User erst mal Rechte
> drauf zuzugreifen.

Ah, drum. Ist "public" wohl die Standardvorgabe bei Einrichten neuer
Datenbanken?

>> Ist das so gewollt oder habe ich da in der Konfiguration etwas
>> noch nicht beachtet/gekannt?

> Ja. Du musst die Recht explizit klauen.

Das habe ich jetzt so gemacht:

REVOKE ALL ON DATABASE tester FROM public;

Wahrscheinlich ist ein

REVOKE CONNECT ON DATABASE tester FROM public;

bereits voellig ausreichend.

Mit beiden geht das und das System antwortet mir beim
Verbindungsversuch korrekt:

blancke=> \c tester
FATAL: keine Berechtigung f?r Datenbank >>tester<<
DETAIL: Benutzer hat das CONNECT-Privileg nicht.
Vorherige Verbindung wurde behalten

Aber Auflisten kann ich vorhandene Datenbanken immer noch:

blancke=> \l+

Name | Eigentümer | [...] | Zugriffsprivilegien | Größe | Tablespace |
-----------+------------+-[...]-+-----------------------+-----------+------------+-
[...]
tester | tester | [...] | tester=CTc/tester | No Access | pg_default |

Gut, das ist augenblicklich (noch) nicht weiter schlimm.

In das Rechtesystem musz ich mich mal vertiefen, das ist wichtig.
Die Arbeit mit PostgreSQL macht sehr viel Spasz!

Danke fuer Deinen Denkanstosz!

Andreas Scherbaum

unread,
Sep 20, 2012, 3:19:32 PM9/20/12
to
Hallo,

Peter Blancke <bla...@gmx.de> wrote:
>
> Ist das so gewollt oder habe ich da in der Konfiguration etwas noch
> nicht beachtet/gekannt?

Verbindungsrechte zu einer Datenbank werden gewᅵhnlich in
pg_hba.conf konfiguriert. Die Liste aller Datenbanken ist durch
jeden Benutzer einsehbar.

--
Andreas 'ads' Scherbaum
German PostgreSQL User Group
European PostgreSQL User Group - Board of Directors
Volunteer Regional Contact, Germany - PostgreSQL Project

Peter Blancke

unread,
Sep 21, 2012, 3:54:36 AM9/21/12
to
Am 2012-09-20, Andreas Scherbaum <ads-...@wars-nicht.de> schrieb:

> Verbindungsrechte zu einer Datenbank werden gewöhnlich in
> pg_hba.conf konfiguriert.

Ja, das ist dort auch (hier Debian/Squeeze) gut kommentiert.

> Die Liste aller Datenbanken ist durch jeden Benutzer einsehbar.

Ja, alleine durch den Konsolenbefehl "psql -l".

Das irritiert den von mySQL-herkommenden Benutzer, denn in mySQL
sieht das so aus:

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| blancke |
+--------------------+
2 rows in set (0.00 sec)

Und ich weisz, dasz dort ca. weitere 150 Datenbanken drauf sind.

Das ist eben in PostgreSQL anders geloest, dort sieht man eben
_alle_ vorhandenen Datenbanken. Ist ja wohl auch nicht weiter
schlimm, wenn CONNECT entzogen wurde.

Wenn man das weisz und hat etliche voneinander unabhaengige Nutzer
auf einem System, weisz man in der Administration eben, dasz man
Datenbanken dann eher mit aussagelosen Namen anzulegen hat, um
Rueckschluesse auf anderer Leute Taetigkeit zu unterbinden.
0 new messages