sql >> Databáze >  >> RDS >> PostgreSQL

postgresql 9.1 - přístup k tabulkám pomocí funkcí

Ano, je to proveditelné.

"superuser" může být skutečný superuser , postgres ve výchozím nastavení. Přejmenuji roli pro běžné uživatele na usr , protože user je vyhrazené slovo – nepoužívejte jej jako identifikátor.

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;

Nebo můžete vytvořit role démona bez přihlášení, abyste vlastnili funkce a měli příslušná práva na stole. To by bylo ještě bezpečnější.

Pokud se vydáte touto cestou, budete milovat ALTER DEFAULT PRIVILEGES (představeno s PostgreSQL 9.0). Další podrobnosti v této související odpovědi .

Přečtěte si kapitolu Psaní SECURITY DEFINER Funguje bezpečně v návodu.




  1. Agregovat bitové NEBO v poddotazu

  2. Vytváření asociativního pole na úrovni balíčku v jazyce Java

  3. spojte tři tabulky pro konkrétní výsledek

  4. Jak přimět MySql 8 ke spuštění s laravelem?