pg_set_acl
PostgreSQL extension that implements a SET command access control list.
Installation
Compiling
This module can be built using the standard PGXS infrastructure. For this to work, the pg_config program must be available in your $PATH:
git clone https://github.com/pierreforstmann/pg_set_acl.git
cd pg_set_acl
make
make install
This extension has been validated with PostgreSQL 10, 11, 12, 13 and 14.
PostgreSQL setup
Extension should be loaded at server level with shared_preload_libraries parameter:
shared_preload_libraries='pg_set_acl'
Extension must be created in each database with:
create extension pg_set_acl;
Usage
pg_set_acl has no specific GUC setting.
Note that installing pg_set_acl removes execution privilege on set_config function from PUBLIC.
Example
testdb=# \c testdb postgres
You are now connected to database "testdb" as user "postgres".
testdb=# create extension pg_set_acl;
CREATE EXTENSION
testdb=# \c testdb testuser;
You are now connected to database "testdb" as user "testuser".
testdb=> select * from set_acl.privs;
privilege | parameter_name | user_name
-----------+----------------+-----------
(0 rows)
testdb=> set work_mem='1GB';
ERROR: pg_set_acl: permission denied for (work_mem,testuser)
testdb=> \c testdb postgres
You are now connected to database "testdb" as user "postgres".
testdb=# select set_acl.grant('work_mem','testuser');
grant
-------
t
(1 row)
testdb=# \c testdb testuser;
You are now connected to database "testdb" as user "testuser".
testdb=> select * from set_acl.privs;
privilege | parameter_name | user_name
-----------+----------------+-----------
SET | work_mem | testuser
(1 row)
testdb=> set work_mem='1GB';
SET
testdb=> show work_mem;
work_mem
----------
1GB
(1 row)
testdb=>