sql >> Database >  >> RDS >> PostgreSQL

Maak een PostgreSQL 9-rol met login (gebruiker) alleen om functies uit te voeren

Voer dit uit verbonden met de database die u wilt configureren.

-- Create the user.
CREATE ROLE somebody WITH LOGIN PASSWORD '...';

-- Prevent all authenticated users from being able to use the database,
-- unless they have been explicitly granted permission.
REVOKE ALL PRIVILEGES ON DATABASE foo FROM PUBLIC;
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM PUBLIC;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM PUBLIC;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC;

-- Allow the user to only use the specified functions.
GRANT CONNECT ON DATABASE foo TO somebody;
GRANT EXECUTE ON FUNCTION return_customers(), return_time() TO somebody;

Als je meer schema's hebt dan "openbaar", dan moet je die toevoegen aan de twee REVOKE ALL PRIVILEGES ON ALL ... verklaringen.

Vergeet niet dat de functies gemaakt moeten zijn met SECURITY DEFINER of deze gebruiker kan ze nog steeds niet uitvoeren, omdat de inhoud van de functie wordt uitgevoerd met de machtigingen van deze gebruiker, in plaats van de gebruiker die de functie heeft gemaakt.

Zie:




  1. Hoe de MySQL-opgeslagen procedure van Rails aan te roepen?

  2. Wampserver 2.1 geeft oranje pictogram na installatie op Windows 7

  3. Kwalificeren van een tijdelijke tabelkolomnaam in jOOQ

  4. Mysql maakt database aan met nieuwe databaselocatie