sql >> Databasteknik >  >> RDS >> PostgreSQL

Skapa PostgreSQL 9-roll med inloggning (användare) bara för att utföra funktioner

Kör detta kopplat till databasen du vill konfigurera.

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

Om du har fler scheman än "offentliga" måste du lägga till dessa till de två REVOKE ALL PRIVILEGES ON ALL ... uttalanden.

Glöm inte att funktionerna måste ha skapats med SECURITY DEFINER eller så kommer den här användaren fortfarande inte att kunna köra dem, eftersom innehållet i funktionen kommer att köras med den här användarens behörighet, istället för användaren som skapade funktionen.

Se:




  1. Unit Testing Framework för Oracle PL/SQL?

  2. BULK INSERT i MYSQL

  3. Hur man visar en sträng som är på två olika språk (Hindi/engelska) i php

  4. HQL - Kontrollera om en Array innehåller ett värde