@@ -40,7 +40,7 @@ SELECT obj_type 'TABLE' AS object_type,
40
40
has_table_privilege(r .oid , t .oid , p .perm ) AS granted
41
41
FROM pg_catalog .pg_class AS t
42
42
CROSS JOIN pg_catalog .pg_roles AS r
43
- CROSS JOIN (VALUES (TEXT ' INSERT' ), (' UPDATE' ), (' DELETE' ), (' TRUNCATE' ), (' REFERENCES' ), (' TRIGGER' )) AS p(perm)
43
+ CROSS JOIN (VALUES (TEXT ' SELECT ' ), ( ' INSERT' ), (' UPDATE' ), (' DELETE' ), (' TRUNCATE' ), (' REFERENCES' ), (' TRIGGER' )) AS p(perm)
44
44
WHERE t .relnamespace ::regnamespace::name <> ' information_schema'
45
45
AND t .relnamespace ::regnamespace::name NOT LIKE ' pg_%'
46
46
AND t .relkind = ' r'
@@ -58,7 +58,7 @@ SELECT obj_type 'VIEW' AS object_type,
58
58
has_table_privilege(r .oid , t .oid , p .perm ) AS granted
59
59
FROM pg_catalog .pg_class AS t
60
60
CROSS JOIN pg_catalog .pg_roles AS r
61
- CROSS JOIN (VALUES (' INSERT' ), (' UPDATE' ), (' DELETE' ), (' TRIGGER' )) AS p(perm)
61
+ CROSS JOIN (VALUES (TEXT ' SELECT ' ), ( ' INSERT' ), (' UPDATE' ), (' DELETE' ), ( ' TRUNCATE ' ), ( ' REFERENCES ' ), (' TRIGGER' )) AS p(perm)
62
62
WHERE t .relnamespace ::regnamespace::name <> ' information_schema'
63
63
AND t .relnamespace ::regnamespace::name NOT LIKE ' pg_%'
64
64
AND t .relkind = ' v'
@@ -77,7 +77,7 @@ SELECT obj_type 'COLUMN' AS object_type,
77
77
FROM pg_catalog .pg_class AS t
78
78
JOIN pg_catalog .pg_attribute AS c ON t .oid = c .attrelid
79
79
CROSS JOIN pg_catalog .pg_roles AS r
80
- CROSS JOIN (VALUES (' INSERT ' ), (' UPDATE ' ), (' SELECT ' ), (' REFERENCES' )) AS p(perm)
80
+ CROSS JOIN (VALUES (' SELECT ' ), (' INSERT ' ), (' UPDATE ' ), (' REFERENCES' )) AS p(perm)
81
81
WHERE t .relnamespace ::regnamespace::name <> ' information_schema'
82
82
AND t .relnamespace ::regnamespace::name NOT LIKE ' pg_%'
83
83
AND c .attnum > 0 AND NOT c .attisdropped
@@ -182,12 +182,24 @@ CREATE TABLE permission_target (
182
182
schema_name name,
183
183
object_name text ,
184
184
column_name name,
185
+ CONSTRAINT permission_target_valid
185
186
CHECK (CASE WHEN object_type = ' DATABASE'
186
187
THEN schema_name IS NULL AND object_name IS NULL AND column_name IS NULL
188
+ AND ARRAY[' CONNECT' ,' CREATE' ,' TEMPORARY' ]::perm_type[] @> permissions
187
189
WHEN object_type = ' SCHEMA'
188
190
THEN object_name IS NULL AND column_name IS NULL
189
- WHEN object_type IN (' TABLE' , ' VIEW' , ' SEQUENCE' , ' FUNCTION' )
191
+ AND ARRAY[' CREATE' ,' USAGE' ]::perm_type[] @> permissions
192
+ WHEN object_type IN (' TABLE' , ' VIEW' )
190
193
THEN column_name IS NULL
194
+ AND ARRAY[' SELECT' ,' INSERT' ,' UPDATE' ,' DELETE' ,' TRUNCATE' ,' REFERENCES' ,' TRIGGER' ]::perm_type[] @> permissions
195
+ WHEN object_type = ' SEQUENCE'
196
+ THEN column_name IS NULL
197
+ AND ARRAY[' SELECT' ,' USAGE' ,' UPDATE' ]::perm_type[] @> permissions
198
+ WHEN object_type = ' FUNCTION'
199
+ THEN column_name IS NULL
200
+ AND ARRAY[' EXECUTE' ]::perm_type[] @> permissions
201
+ WHEN object_type = ' COLUMN'
202
+ THEN ARRAY[' SELECT' ,' INSERT' ,' UPDATE' ,' REFERENCES' ]::perm_type[] @> permissions
191
203
END)
192
204
);
193
205
0 commit comments