Въз основа на информацията, която четох за привилегиите, научих, че е добре да се отнемат привилегии, преди да се присвоят каквито и да е привилегии на роли. Имах 1 потребител, с когото работех, наречен appuser и направих следното:
REVOKE ALL PRIVILEGES ON SCHEMA PUBLIC FROM GROUP PUBLIC;
GRANT SELECT
ON public.table1 TO appuser;
GRANT SELECT
ON public.table1_id_seq TO appuser;
GRANT SELECT
ON public.table2 TO appuser;
GRANT SELECT
ON public.table2_id_seq TO appuser;
Направих това с надеждата да премахна всички привилегии, прикрепени към всички новодобавени потребители, които автоматично са част от членството в публична роля. Вместо това получих грешка в резултат на appuser няма разрешения за схемата. Това обаче е моето неразбиране с тази грешка. 1. PgAdminIII не показва публична роля под Групови роли за тази схема 2. appuser не изглежда да е член на група, наречена public (защото не съществува в интерфейса). 3. привилегиите на appuser са изрично предоставени, дори и да са част от публичната роля
И така... има ли някаква подразбираща се групова роля, наречена „Публичен“, която засяга привилегиите на този потребител? Не разбирам какво става. Също така се опитах да намеря къде да покажа членството в груповата роля от командния ред pgAdminIII, но и там не успях. Между другото, за да го поправя, просто обърнах първата команда (т.е. ПРЕДОСТАВЯНЕ НА ВСИЧКИ ПРИВИЛЕГИИ НА СХЕМА ПУБЛИЧНО НА ГРУПА ПУБЛИЧНО); Това обаче основно отменя това, което първоначално се опитвах да направя (т.е. просто да заключа масите).
Някакви идеи?
Актуализация: Имам предчувствие, открих какъв може да е проблемът. Не мисля, че appuser има разрешения за схемата. Ако не греша, разрешенията за схемата трябва да бъдат предоставени, преди да може да се получи достъп до обекти под схемата.
appuser
в схемата, ако грешката казва, че ролята няма разрешения за схемата? Все пак вие ги отменихте за всички и не ги давате на никого. - person Milen A. Radev   schedule 06.12.2013