Wykonaj to w połączeniu z bazą danych, którą chcesz skonfigurować.
-- 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;
Jeśli masz więcej schematów niż „publiczne”, musisz dodać je do dwóch REVOKE ALL PRIVILEGES ON ALL ...
oświadczenia.
Nie zapominaj, że funkcje musiały zostać utworzone za pomocą SECURITY DEFINER
lub ten użytkownik nadal nie będzie mógł ich wykonać, ponieważ zawartość funkcji zostanie wykonana z uprawnieniami tego użytkownika, a nie użytkownika, który utworzył funkcję.
Zobacz:
CREATE FUNCTION
szczególnieSECURITY DEFINER
GRANT
zarówno do dodawania użytkowników do ról, jak i przypisywania praw dostępu do tabel, sekwencji itp.REVOKE
CREATE ROLE