PostgreSQL user's privileges listing for a particular database - postgresql

i have a user created under login roles in pgAdmin. user's name is 'myApp'.
here is the pgsql syntax to create it.
CREATE ROLE myApp LOGIN
ENCRYPTED PASSWORD 'md58e0b379fc6e92422518682611bcf2d42'
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE NOREPLICATION;
all these days i had my application developed by yii framework to connect to database with super user in my end. which is.. user 'postgres'
but after doing a release recently i started getting an error as below
i found its because of i have set permission to the myApp user role for newly created table but have missed to do the same for sequence so i wrote the below script to resolve..
GRANT ALL ON TABLE css_ataps_client_outgoing_call_dates_id_seq TO myAppAdmin;
GRANT SELECT, UPDATE ON TABLE css_ataps_client_outgoing_call_dates_id_seq TO myApp;
now i need to enable my application to connect to database using the same login as my production application which is myApp but not postgres.
but unfortunately it doesn't work unless i use postgres user. The error i got when trying to connect with myApp user is nothing. not even recorded in logs. so i can confirm that login details are same and its working and the issue could be the user myApp doesnt have read / write access to any single table. so i want to check for which table in database it doesnt have permission or vice versa.
please tell me a way to find this out. thanks.

This will do. Try and let me know.
GRANT ALL ON DATABASE <ur database name> TO myApp; <- not this
TRY THIS QUERY..!
GRANT SELECT,UPDATE,INSERT,DELETE ON ALL TABLES IN SCHEMA public TO myApp;

Related

Limited access for postgreSQL user

is it possible to create PostgreSQL user so that he can connect and see only one specific database? So that he could only see one database (he couldn't see the others). Ideally, I could also set the visibility of the tables in the database.
I create user like this:
create user user with encrypted password 'password';
GRANT CONNECT ON DATABASE db TO user;
although I have given the user connect privilege to only one database, he can see all other databases :(
By default the connect privilege to every database is granted to the role public, so you need to run:
revoke connect on database ... from public;
for all other databases. Make sure you grant connect back to existing users.
Another option is to restrict connections for this specific user through pg_hba.conf

How can I add pg_monitor role to a postgresql user on heroku

I'm trying to set up a Datadog PostgreSQL integration that requires a user with pg_monitor role and SELECT permission on pg_stat_database as described on their own documentation.
My database is currently hosted on Heroku and it seems the default user doesn't have SUPERUSERpermissions because, when I try to apply the above role and permission to a "monitor" user I have the following error message:
ERROR: must have admin option on role "pg_monitor"
So I'm looking for some way of:
grant the necessary permissions to that user without being a superuser
get superuser access on Heroku Postgres (what I think is not possible)
Someone has ever faced this issue? There is a way to handle this case?
I had to open a ticket asking the Heroku CS team to apply the "pg_monitor" role to my user. They've granted the role and now everything is working fine

How to set or change role upon login automatically in postgres?

I have an existing postgres 11 database called host_db and we have an existing application called host_app that has been using this database for a long time. This service uses superuser host_app_user to connect to database and do all the transactions. Hence, all the database objects are owned by this database superuser.
Now, we want to create db_admin superuser role too in our database whose credentials will be maintained by Vault. But to not mix up database ownership, I was thinking that whenever db_admin logs in to the database, it assumes the role of host_app_user. That way whatever changes the logged admin does will all be done as host_app_user.
My question is: Is there a way I can automatically set the role of logged in user in postgres at the time of logging in?
Use:
alter role db_admin set role host_app_user;
db_admin's role will be set to host_app_user on login.
Note though that db_admin must be a member of host_app_user.
I think the answer is no. But you could do this:
grant db_admin to host_app_user;
Then host_app_user will have all the permissions that db_admin has.

postgreSQL login as created new user?

I'm new to postgresql database. I followed instruction online and get my postgreSQL database installed and everything works fine. with psql, I created new user user1 as below:
CREATE USER user1 WITH PASSWORD '123';
Now I have a user called 'user1', in addition to default user 'postgres'.
I'm very confused with what those user can do. I'm not sure what is the use of creating the new user.
My questions are:
Can I log into the database as user1? How?
Can the user see all the database in the system, no matter what the database owner is? In my case, all the database I created is owned by 'postgres'.
Am I able to make the user see only some of the databases?

How to create a user in postgres and to give grantall privileges

I'm new to PostgreSQL and I have created a postgres instance in the AWS RDS and I have also created a new user. Now I would like to grant all privileges to that user for creating new databases and to perform all admin operations.
I have found the below query to do that but it was providing access only to a particular database and that user is unable to create a new database.
GRANT ALL ON DATABASE workflow TO cnwrkstag;
I have also tried to provide access as a super user of RDS but I'm getting an error as I am unable to so because it should be a super user.
Can anyone help me with this?
You must be very careful with the super users, you can doit this way:
ALTER ROLE role_name SUPERUSER;
Or
ALTER USER user_name SUPERUSER;
Here is the documentation:
Alter-role