PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

postgresql 9.1 - достъп до таблици чрез функции

Да, това е възможно.

"superuser" може да е действителен superuser , postgres по подразбиране. Преименувам ролята за обикновени потребители на usr , защото user е запазена дума - не я използвайте като идентификатор.

CREATE ROLE usr;
CREATE ROLE poweruser;
GRANT usr TO poweruser;  -- poweruser can do everything usr can.

CREATE ROLE bob PASSWORD <password>;
GRANT poweruser TO bob;

CREATE ROLE alice PASSWORD <password>;
GRANT usr TO alice;

REVOKE ALL ON SCHEMA x FROM public;
GRANT USAGE ON SCHEMA x TO usr;

REVOKE ALL ON TABLE x FROM public;
REVOKE ALL ON TABLE y FROM public;

CREATE FUNCTION
  ...
SECURITY DEFINER;

REVOKE ALL ON FUNCTION ... FROM public;
GRANT EXECUTE ON FUNCTION a TO usr;
GRANT EXECUTE ON FUNCTION b TO poweruser;

Или можете да създадете роли на демон без влизане, за да притежавате функциите и да държите съответните права на масата. Това би било още по-сигурно.

Ако тръгнете по този маршрут, ще обикнете ALTER DEFAULT PRIVILEGES (въведено с PostgreSQL 9.0). Повече подробности в този свързан отговор .

Прочетете главата Писане на SECURITY DEFINER Функционира безопасно в ръководството.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Docker изчакайте да стартира postgresql

  2. Генерирайте поредица от седмични интервали за даден месец

  3. Инсталиране на PostgreSQL gem pq за Heroku

  4. Преобразувайте номера на месеца в име на месеца в PostgreSQL

  5. Heroku Postgresql с Google Datastudio