Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Granted all privileges on my PostGres table, but still am getting a "Permission denied" error when attempting to insert/select

I'm using PostGres 9.5. I'm having trouble inserting data into a table I just created. I'm getting "permission denied" errors despite granting all privileges to the database user. See below ...

localhost:myapp davea$ psql -Upostgres
Password for user postgres:
psql (9.5.0, server 9.5.1)
Type "help" for help.

postgres=# GRANT ALL ON schema public TO myapp;
GRANT

localhost:myapp davea$ psql -Upostgres
Password for user postgres:
psql (9.5.0, server 9.5.1)
Type "help" for help.

postgres=# GRANT USAGE ON schema public TO myapp;
GRANT
postgres=# \q
localhost:myapp davea$ myapp
psql (9.5.0, server 9.5.1)
Type "help" for help.

myapp=> insert into search_codes (id, code, address_id) values (1, 'atlanta', 'GA');
ERROR:  permission denied for relation search_codes
myapp=> select * FROM search_codes;
ERROR:  permission denied for relation search_codes
myapp=> \d search_codes;
                                Table "public.search_codes"
   Column   |       Type        |                         Modifiers
------------+-------------------+-----------------------------------------------------------
 id         | integer           | not null default nextval('search_codes_id_seq'::regclass)
 code       | character varying |
 address_id | character varying |
Indexes:
    "search_codes_pkey" PRIMARY KEY, btree (id)
    "index_search_codes_on_code" UNIQUE, btree (code)
    "index_search_codes_on_address_id" btree (address_id)

What's the proper way to grant privileges so that my user can insert and select from the table?

like image 348
Dave Avatar asked Oct 16 '17 15:10

Dave


People also ask

How do I fix Postgres permission denied?

Grant privileges to a new user We resolve this permission denied error using the command. GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO new_user; The new_user was then able to read data from the table. Similarly, we can also resolve the permission denied error by setting DEFAULT privileges to the user.

How do I check access privileges in PostgreSQL?

Another way to do this is to use the information_schema schema and query the table_privileges table as: $ SELECT * FROM information_schema. table_privileges LIMIT 5; The above query will show detailed information about user privileges on databases as well as tables.


3 Answers

Your first command give you the ability to list table (you can just know that there are existing)

GRANT USAGE ON SCHEMA public TO myapp

Then you have to grant SELECT, INSERT, etc... to all the tables in the schema public

GRANT SELECT, UPDATE, INSERT, DELETE ON ALL TABLES IN SCHEMA public TO myapp

I recommand not giving all privileges to a specific app.

If you have sequences :

 GRANT SELECT, UPDATE, USAGE ON ALL SEQUENCES IN SCHEMA public to myapp

If you have functions :

GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO myapp

Then your example will work.

But you still have to apply some command if you want futur created table to be able to be accessed :

ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, UPDATE, INSERT, DELETE, TRIGGER ON TABLES TO myapp

Postgresql have a very weird mecanism it took me a while to understand it !

like image 166
Rémi Desgrange Avatar answered Oct 16 '22 07:10

Rémi Desgrange


At first you have to login your new database using postgres user

psql your_db_name -U postgres -h your_host_name

give the ability to list table

GRANT USAGE ON SCHEMA public TO your_user_name

Then you have to grant permission to all the tables in the schema public

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO your_user_name

If you have sequences then give permission

GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user_name
like image 30
Kamrujjaman Khan Avatar answered Oct 16 '22 06:10

Kamrujjaman Khan


You're granting permissions in the postgres database instead of the myapp database.

Change the first PSQL command to

psql -Upostgres myapp

And then issue the grants

like image 22
Gary Avatar answered Oct 16 '22 07:10

Gary