1
+ -- AUTHOR: Eric MIlgram, PhD
2
+ --
3
+ -- DATE: 08 Dec 2021
4
+ --
5
+ -- PURPOSE
6
+ -- The purpose of these SQL statements is to properly set up required
7
+ -- schemas and roles for the PostgreSQL database used for the
8
+ -- Paylocity Coding Challenge.
9
+ --
10
+ -- This code was adapted from the code posted by Mr. Yaser Raja
11
+ -- in a blog post titled "Managing PostgreSQL users and roles," which
12
+ -- was published on the "AWS Database Blog" on 04 MAR 2019. The post's
13
+ -- permalink is
14
+ -- https://aws.amazon.com/blogs/database/managing-postgresql-users-and-roles/
15
+
16
+ -- ############################################################################
17
+ -- Create the Paylocity database
18
+ -- NOTE: The steps in this section are not required when using PostgreSQL on
19
+ -- AWS RDS.
20
+ -- ############################################################################
21
+ -- CREATE DATABASE paylocity
22
+ -- WITH
23
+ -- OWNER = postgres
24
+ -- ENCODING = 'UTF8'
25
+ -- LC_COLLATE = 'en_US.UTF-8'
26
+ -- LC_CTYPE = 'en_US.UTF-8'
27
+ -- TABLESPACE = pg_default
28
+ -- CONNECTION LIMIT = -1;
29
+
30
+ -- SET default_tablespace = pg_default;
31
+
32
+ -- ############################################################################
33
+ -- Create the 'dev' schema, which is for DB development only
34
+ -- ############################################################################
35
+ CREATE SCHEMA dev ;
36
+
37
+ COMMENT ON SCHEMA dev IS ' Schema for developers' ;
38
+
39
+ -- ############################################################################
40
+ -- REVOKE privileges from 'public' role from public
41
+ -- ############################################################################
42
+ REVOKE CREATE ON SCHEMA public FROM PUBLIC;
43
+
44
+ REVOKE ALL ON DATABASE paylocity FROM PUBLIC;
45
+
46
+ -- ############################################################################
47
+ -- CREATE Read-only role
48
+ -- ############################################################################
49
+ CREATE ROLE readonly;
50
+
51
+ GRANT CONNECT ON DATABASE paylocity TO readonly;
52
+
53
+ GRANT USAGE ON SCHEMA dev TO readonly;
54
+
55
+ GRANT SELECT ON ALL TABLES IN SCHEMA dev TO readonly;
56
+
57
+ ALTER DEFAULT PRIVILEGES IN SCHEMA dev
58
+ GRANT SELECT ON TABLES TO readonly;
59
+
60
+ -- ############################################################################
61
+ -- CREATE Read/write role
62
+ -- ############################################################################
63
+ CREATE ROLE readwrite;
64
+
65
+ GRANT CONNECT ON DATABASE paylocity TO readwrite;
66
+
67
+ GRANT USAGE, CREATE ON SCHEMA dev TO readwrite;
68
+
69
+ GRANT SELECT , INSERT, UPDATE , DELETE ON ALL TABLES IN SCHEMA dev TO readwrite;
70
+
71
+ ALTER DEFAULT PRIVILEGES IN SCHEMA dev
72
+ GRANT SELECT , INSERT, UPDATE , DELETE ON TABLES TO readwrite;
73
+
74
+ GRANT USAGE ON ALL SEQUENCES IN SCHEMA dev TO readwrite;
75
+
76
+ ALTER DEFAULT PRIVILEGES IN SCHEMA dev
77
+ GRANT USAGE ON SEQUENCES TO readwrite;
78
+
79
+ -- ############################################################################
80
+ -- Create users
81
+ -- ############################################################################
82
+ CREATE USER reporting_user1 WITH PASSWORD ' reporting_user1CHANGE_ON_FIRST_LOGIN' ;
83
+
84
+ CREATE USER reporting_user2 WITH PASSWORD ' reporting_user2CHANGE_ON_FIRST_LOGIN' ;
85
+
86
+ CREATE USER app_user1 WITH PASSWORD ' CHANGE_ON_FIRST_LOGIN' ;
87
+
88
+ CREATE USER app_user2 WITH PASSWORD ' CHANGE_ON_FIRST_LOGIN' ;
89
+
90
+ -- ############################################################################
91
+ -- Grant privileges to users
92
+ -- ############################################################################
93
+ GRANT readonly TO reporting_user1;
94
+
95
+ GRANT readonly TO reporting_user2;
96
+
97
+ GRANT readwrite TO app_user1;
98
+
99
+ GRANT readwrite TO app_user2;
0 commit comments