Skip to content

Instantly share code, notes, and snippets.

@jackie-do
Last active January 4, 2018 06:50
Show Gist options
  • Save jackie-do/a748550cb6438ad1c17d23fb9b6c4226 to your computer and use it in GitHub Desktop.
Save jackie-do/a748550cb6438ad1c17d23fb9b6c4226 to your computer and use it in GitHub Desktop.
Set up a read-only user for Postgresql
  1. Create a linux user and set password
sudo adduser read_access

.. then enter your password for this user

  1. Limit permission for the user (option) .. normally, this user only has root permission on it's directory. (/home/read_access)

  2. Set read-only role for this user to use Postgresql

psql -U postgres -d <your database>
CREATE USER read_access WITH PASSWORD '<your password>';
  
GRANT CONNECT ON DATABASE <your database> TO read_access;
  
GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_access;
  
GRANT SELECT ON ALL SEQUENCES IN SCHEMA public TO read_access;
  
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO read_access;
  
ALTER USER read_access SET default_transaction_read_only = on;  
  1. Dump your database
PGPASSWORD="<your password>" pg_dump -Fc --no-acl --no-owner -h localhost -U read_access -d <your database> -t <your table> > mydb.dump
  1. If you try to "change you will get this error" ERROR: cannot execute INSERT in a read-only transaction
@kieetnvt
Copy link

great!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment