PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Erstellen Sie eine PostgreSQL 9-Rolle mit Login (Benutzer), nur um Funktionen auszuführen

Führen Sie dies verbunden mit der Datenbank aus, die Sie konfigurieren möchten.

-- 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;

Wenn Sie mehr Schemas als "öffentlich" haben, müssen Sie diese zu den beiden REVOKE ALL PRIVILEGES ON ALL ... hinzufügen Aussagen.

Vergessen Sie nicht, dass die Funktionen mit SECURITY DEFINER oder dieser Benutzer kann sie immer noch nicht ausführen, da der Inhalt der Funktion mit den Berechtigungen dieses Benutzers ausgeführt wird, anstatt des Benutzers, der die Funktion erstellt hat.

Siehe: