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

Wie GEWÄHRE ICH ALLE PRIVILEGIEN für ALLE ANSICHTEN in einer Anweisung?

Die einzige Möglichkeit, dies in einer einzigen Anweisung (sozusagen) zu tun, besteht darin, eine Funktion zu erstellen, andernfalls listen Sie entweder ausdrücklich alle Ansichten auf oder Sie gewähren allen Tabellen und widerrufen dann Nicht-Ansichten.

Ich habe das schnell geschrieben, aber getestet. Möglicherweise müssen Sie nach Bedarf anpassen:

CREATE OR REPLACE FUNCTION fn_grant_all_views(schema_name TEXT, role_name TEXT)
RETURNS VOID AS $func$

DECLARE view_name TEXT;

BEGIN

  FOR view_name IN
    SELECT viewname FROM pg_views WHERE schemaname = schema_name
  LOOP
    EXECUTE 'GRANT ALL PRIVILEGES ON ' || schema_name || '.' || view_name || ' TO ' || role_name || ';';
  END LOOP;

END; $func$ LANGUAGE PLPGSQL

Verwendung:

SELECT fn_grant_all_views('my_schema','my_role');