Create Schemas Script
Create Schemas Script
2.Create Tables
DO
$$
DECLARE
reader name := 'db_reader';
writer name := 'db_writer';
executor name := 'db_executor';
-- dbname name = 'integrations'; -- specify database name here
tablename name;
schemaname name;
sequencename name;
BEGIN
-- Grant Table Permissions--
FOR tablename IN
SELECT table_name
FROM information_schema.tables
WHERE table_schema != 'information_schema'
and table_name not like 'pg%'
and table_name not like '%aws%'
LOOP
EXECUTE format('GRANT SELECT ON TABLE %I to %I;', tablename, reader);
-- EXECUTE format('GRANT CONNECT ON DATABASE %I TO %I;', dbname, reader);
EXECUTE format('GRANT INSERT, UPDATE, DELETE, TRUNCATE, TRIGGER, REFERENCES
ON TABLE %I to %I;', tablename, writer);
END LOOP;
-- Grant Sequence Permissions --
FOR sequencename IN
SELECT sequence_name FROM information_schema.sequences
LOOP
EXECUTE format('GRANT USAGE, SELECT ON SEQUENCE %I to %I;', sequencename,
reader);
EXECUTE format('GRANT UPDATE ON SEQUENCE %I to %I;', sequencename, writer);
END LOOP;
-- Grant Function,Schema Permissions On All Schemas --
FOR schemaname IN
SELECT nspname FROM pg_namespace WHERE nspname NOT LIKE 'pg_%' -- AND nspname
<> 'information_schema'
LOOP
EXECUTE format('GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA %I to %I;',
schemaname, executor);
EXECUTE format('GRANT USAGE ON SCHEMA %I to %I;', schemaname, reader);
EXECUTE format('GRANT CREATE ON SCHEMA %I to %I;', schemaname, writer);
END LOOP;
-- Alter Default Privileges For All Tables and Functions For all users --
-- Tables
EXECUTE format('ALTER DEFAULT PRIVILEGES GRANT SELECT ON TABLES TO %I;',
reader);
EXECUTE format('ALTER DEFAULT PRIVILEGES GRANT INSERT, UPDATE, DELETE,
TRUNCATE, TRIGGER, REFERENCES ON TABLES TO %I;', writer);
-- Sequences
EXECUTE format('ALTER DEFAULT PRIVILEGES GRANT USAGE, SELECT ON SEQUENCES TO
%I;', reader);
EXECUTE format('ALTER DEFAULT PRIVILEGES GRANT UPDATE ON SEQUENCES TO %I;',
writer);
-- Schema
FOR schemaname IN
SELECT nspname FROM pg_namespace WHERE nspname NOT LIKE 'pg_%' -- AND nspname
<> 'information_schema'
LOOP
EXECUTE format('ALTER DEFAULT PRIVILEGES IN SCHEMA %I GRANT EXECUTE ON
FUNCTIONS TO %I;',schemaname,executor);
END LOOP;
END;
$$ LANGUAGE plpgsql;
4. Run the following ***After you run the permissions script you will want to run
the following: