Portál AbcLinuxu, 11. května 2025 07:34

Dotaz: Práva na databázích v postgres 8.3

2.1.2009 17:10 Lubos Kopecky | skóre: 32
Práva na databázích v postgres 8.3
Přečteno: 444×
Odpovědět | Admin
Mám dotaz ohledně práv na db, aby je mohl číst jen vlastník - v tuto chvíli může každý procházet strukturu až na úroveň sloupce tabulky (hodnoty číst nemůže), což se mi nelíbí.

Rád bych to zakázal, ale nedaří se mi přijít na to jak.

Zkoušel sem
REVOKE SELECT ON pg_database FROM PUBLIC;
což mi znepřístupní všechny databáze, ale zároveň i ty, kterých je vybraný uživatel vlastníkem (počet db=0).

V
/etc/postgresql/8.3/main/pg_hba.conf
mám nastaveno
# Database administrative login by UNIX sockets
local   all         postgres                          ident sameuser

# TYPE  DATABASE    USER        CIDR-ADDRESS          METHOD
#
# "local" is for Unix domain socket connections only
local   all             all                               ident sameuser
#local   sameuser         all                               trust
# IPv4 local connections:
host    all              all            127.0.0.1/32          md5
host    all              admin          127.0.0.1/32          md5
hostssl all              all            0.0.0.0/0             md5
hostssl all              admin          0.0.0.0/0             md5
# IPv6 local connections:
host    all              admin          ::1/128               md5
což umožní viditelnost všech db všem rolím.

Změna z
hostssl all              all            0.0.0.0/0             md5
hostssl all              admin          0.0.0.0/0             md5
na
hostssl sameuser         all            0.0.0.0/0             md5
hostssl all              admin          0.0.0.0/0             md5
mi taky znepřístupní připojení k db, že není žádné dostupné pravidlo splňující přihlášení (měním pouze ssl, protože přes něj se k db příhlašuji). U uživatele admin chci, aby měl přístup na všechny db, proto ten druhý řádek.

Zkusil sem vytvořit jiné schéma než public pod stejným názvem jako je uživatel i jméno db, nastavil vlastnické právo na tohoto uživatel, ale ani to mi nepomohlo a ostatní mohou procházet schémata dle libosti až na úroveň řádku tabulky.

Přístup k databázím a zkouším v PgAdmin III, kde nastavává pro mne zajímavý úkaz - připojím se k db a vidím všechny db, upravím pg_hba.conf a reloadnu server, tak mám přístup jen do své db a do jiných ne, což by mi vyhovovalo. Pokud se ale odhlásím, tam se již při pokusu o přihlášení nepřipojím ani ke své db.

Je tedy možné nějakým způsobem nastavit viditelnost jen db, na které má vlastník právo vidět a u ostatních zakázat i jejich procházení? Pokud to není možné nějak zakázat přímo v postgresu, tak třeba nějaký patch, který by to řešil neexistuje?

Moc děkuji
Nástroje: Začni sledovat (1) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

okbob avatar 2.1.2009 22:02 okbob | skóre: 30 | blog: systemakuv_blog | Benešov
Rozbalit Rozbalit vše Re: Práva na databázích v postgres 8.3
Odpovědět | | Sbalit | Link | Blokovat | Admin

Tohle je vlastnost PostgreSQL, a zakázat to v podstatě nijak nejde. Můžeš si pohrát s rolemi a sebrat SELECT na některých systémových tabulkách, např. pg_class, a to je asi tak všechno. Pokud chceš skutečně nezávislé databáze, tak si pak vytvoř víc db clusterů (instancí PostgreSQL) a provozuj je na různých ip nebo různých portech.Režie je minimální.

Pavel

3.1.2009 16:40 Zdenek Kotala
Rozbalit Rozbalit vše Re: Práva na databázích v postgres 8.3

No pokud dobre rozumim problemu, melo by stacit sebrat uzivateli prava connect na danou databazi. Samozrejmne globalni katalogy (seznam databazi, seznam uzivatelu...) budou viditelne. Kouknul bych GRANT/REVOKE ... CONNECT ON DATABASE ...

 www.postgresql.org/docs/8.3/interactive/sql-revoke.html

3.1.2009 20:00 Lubos Kopecky | skóre: 32
Rozbalit Rozbalit vše Re: Práva na databázích v postgres 8.3
Dik, tohle se zda, ze by mohlo byt pouzitelny, sice seznam db uvidi, ale ne jejich strukturu apod, coz je hlavni. Jen sem misto CONNECT pouzil ALL (pouzity dotaz: REVOKE ALL ON DATABASE vybrana_db FROM PUBLIC CASCADE), ale to uz na veci nic nemeni - vlastnik tam pravo pristupu ma a ostatni ne (vyskoci hlaska, ze nemaji prave Tebou psany connect) a to je to, o co tu ted primarne bezi.

dik
3.1.2009 20:04 Lubos Kopecky | skóre: 32
Rozbalit Rozbalit vše Re: Práva na databázích v postgres 8.3
ty instance neni vubec spatnej napad - vice IP je, takze si na jednu z nich hodim jen svoje veci a budu mit klid uplne :) a to omezeni pro ostatni uzivatele, aby videli jen ten prehled db, ale do nich uz se nedostali, snad vyresi dotaz REVOKE ALL ON DATABASE vybrana_db FROM PUBLIC CASCADE;

kdyby mel jeste nekdo nejaky dalsi zajimavy napady jak to poresit, tak sem s tim :)

dik

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.