Изпълнете това свързано към базата данни, която искате да конфигурирате.
-- 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;
Ако имате повече схеми от „обществени“, тогава ще трябва да ги добавите към двете REVOKE ALL PRIVILEGES ON ALL ...
изявления.
Не забравяйте, че функциите трябва да са създадени с SECURITY DEFINER
или този потребител пак няма да може да ги изпълни, тъй като съдържанието на функцията ще бъде изпълнено с разрешенията на този потребител, вместо на потребителя, който е създал функцията.
Вижте:
CREATE FUNCTION
особеноSECURITY DEFINER
GRANT
както за добавяне на потребители към роли, така и за присвояване на права за достъп до таблици, последователности и т.н.REVOKE
CREATE ROLE