Portál AbcLinuxu, 11. května 2025 07:34
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.confmá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 md5což 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 md5na
hostssl sameuser all 0.0.0.0/0 md5 hostssl all admin 0.0.0.0/0 md5mi 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
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
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 ...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.