PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

postgresql 9.1 - dostęp do tabel poprzez funkcje

Tak, jest to wykonalne.

„superużytkownik” może być rzeczywistym superuser , postgres domyślnie.Zmieniam rolę dla zwykłych użytkowników na usr , ponieważ user jest słowem zastrzeżonym - nie używaj go jako identyfikatora.

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;

Możesz też utworzyć role demona bez loginu, aby posiadać funkcje i posiadać odpowiednie prawa w tabeli. To byłoby jeszcze bezpieczniejsze.

Jeśli wybierasz się tą trasą, pokochasz ALTER DEFAULT PRIVILEGES (wprowadzony w PostgreSQL 9.0). Więcej szczegółów w tej powiązanej odpowiedzi .

Przeczytaj rozdział Pisanie SECURITY DEFINER Funkcjonuje bezpiecznie w instrukcji.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ansible kocha PostgreSQL

  2. PHPUnit:Jak przetestować interakcje z bazą danych na zdalnym serwerze Postgres?

  3. Django/Python:Zaktualizuj relację do punktu w ustawieniach.AUTH_USER_MODEL

  4. Wyświetlanie i przełączanie baz danych w PostgreSQL

  5. PG::DuplicateTable:BŁĄD:posty relacji już istnieją