Udfør dette forbundet med den database, du vil konfigurere.
-- 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;
Hvis du har flere skemaer end "offentlige", bliver du nødt til at tilføje dem til de to REVOKE ALL PRIVILEGES ON ALL ...
udsagn.
Glem ikke, at funktionerne skal være oprettet med SECURITY DEFINER
eller denne bruger vil stadig ikke være i stand til at udføre dem, da indholdet af funktionen vil blive udført med denne brugers tilladelser i stedet for den bruger, der oprettede funktionen.
Se:
CREATE FUNCTION
isærSECURITY DEFINER
GRANT
både til at tilføje brugere til roller og til at tildele adgangsrettigheder til tabeller, sekvenser osv.REVOKE
CREATE ROLE