How to enable regular linux users to access postgres database without sudo access? - postgresql

We have a postgres database server(10.3) installed on Centos7, and created a database with the name of "db_name". We have database access. The setting in pg_hba.conf is as the following:
# "local" is for Unix domain socket connections only
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
local replication all peer
host replication all 127.0.0.1/32 ident
host replication all ::1/128 ident
When I have sudo access, I can access the database "db_name".
[root#localhost bin]# sudo -s
[root#localhost bin]# psql -U db_name db_user
psql (10.3)
Type "help" for help.
db_name=>
When I tried to access database as a regular linux user, I got the following error:
[linuxuser#localhost bin]# psql -U db_name db_user
psql: could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
The reason we want to limit some users sudo access is that our report specialists need an access to the database "db_name", but we don't want them to have the sudo privilege to do something else.
What kind of settings shall I do in order to make it work?
Thanks!

I found the solution.
The cause of the problem is that there is no /var/run/postgresql/.s.PGSQL.5432 file existed.
By default, unix_socket_directories is '/tmp' which is set in postgresql.conf.
For some reason, the regular linux user is not looking at /tmp/.s.PGSQL.5432, but instead looking at /var/run/postgresql/.s.PGSQL.5432 file.
So the fix is as the following:
cd /var/run
mkdir postgresql
cd postgresql/
ln -s /tmp/.s.PGSQL.5432 .s.PGSQL.5432
The following command works as well.
psql -h /tmp -U db_user db_name

In PostgreSQL you should create a role to access the DB.
For that you will have to do this:
Change to postgres account (Created during installation of postgresql)
$ sudo -i -u postgres
Create a new role
postgres#server createuser --interactive
Output
Enter name of role to add: DB_Name
Shall the new role be a superuser? (y/n) y
Create Database
postgres#server createdb DB_Name
Create user, change to user and access to database
$ sudo adduser DB_Name
$ sudo -i -u DB_Name
$ psql
DB_Name=# \conninfo
References:
How To Install and Use PostgreSQL on CentOS 7

Related

pgAdmin and terminal: FATAL: password authentication failed for user

sup guys!
I'm trying to create a server local in pdAdmin 4, but everytime i'm trying to create i get this error:
[Error in pgAdmin]
in case 'veterano' its my username...
my tries to make this run (but doesnt work)
Checking if Postgres Service is Installed correctly:
$ sudo systemctl is-active postgresql
terminal back:
active
$ sudo systemctl is-enabled postgresql
terminal back:
enabled
$ sudo systemctl status postgresql
terminal back:
active (exited)
$ sudo pg_isready
terminal back:
/var/run/postgresql:5433 - accepting connections
My configuration to pg_hba.conf :
local all postgres peer
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all peer
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
local replication all peer
host replication all 127.0.0.1/32 md5
host replication all ::1/128 md5
(every time after change something in pg_hba.conf I run $ sudo systemctl restart postgresql to restart postgress service.)
Checking psql and the new superusers:
$ sudo -u postgres createuser -s $USER
terminal back
createuser: error: creation of new role failed: ERROR: role "veterano" already exists
if I try
psql -U veterano i can login... so i try \du to check list of roles
terminal back
List of roles
Role name | Attributes | Member of
-------------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
veterano | Superuser, Create role, Create DB | {}
So I try create a localhost server in terminal:
$ psql -h localhost -d mydatabase -U veterano -p 5432
terminal back:
Password for user veterano:
(I put my password maked with ALTER USER veterano PASSWORD 'newPassword';)
terminal back error
psql: error: FATAL: password authentication failed for user "veterano"
I really don't know what to do... I tried everything and still cant create a local server in pgAdmin 4 or directly in terminal.
Using Ubuntu 20.04.2 LTS
(Sorry for my english )
This is probably too late. but I have the same issue with veterano, and what I did was to change the password for the account "postgres" that I have :
(For those who don't know, postgresql has a user named "postgres" by default after installation)
Steps:
Access PSQL
$ sudo su - postgres
Then try to change the password for "postgres" user by typing :
postgres=# \password
You can then specify any password you want for this account.
Once thats done, you can use pgAdmin to connect using "postgres" username and the password that you just set.
Either you didn't set a password for the user, or you set a different password.
Connect using psql with psql -U veterano and set the password:
veterano=> \password
Enter new password:
Enter it again:
Now you should be good.
Try putting quotation marks '' on your password at your config file.
First we have to get inside postgres through using
sudo -u postgres psql postgres
Enter password for user postgres
Now the terminal will be like this:
postgres=#
Now enter the given line after postgres=#
CREATE USER username WITH PASSWORD 'your password';
(put your password inside quotes('') and don't forget semicolon(;)

PgAdmin on Ubuntu 20.04 FATAL: password authentication failed for user

I've installed Postgres and PGAdmin4 on Ubuntu 20.04, but I'm not able to create a server and connect to the database
As I have seen in several solutions, I changed the method to md5 on my pg_hba.conf file
# Database administrative login by Unix domain socket
local all postgres md5
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 md5
I have as well connected to psql, created new users, alter password and restart the server by running sudo systemctl restart postgresql
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------+-----------
postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
Any ideas?
Run the following commands:
sudo -i -u postgres
Input your sudo user password
psql
ALTER USER postgres PASSWORD 'new_password';
\q
exit
Now change config file to use this new password:
sudo subl /etc/postgresql/13/main/pg_hba.conf
(subl means subliime text, you can use any other text editor).
Edit this part of the file: change peer to md5
# Database administrative login by Unix domain socket
local all postgres peer
# "local" is for Unix domain socket connections only
local all all peer
restart the postgres service
Run this command to sign into postgres using the newly created password:
psql -U postgres
sudo -u postgres psql
and set new password
postgres=# \password
Source of solution:
https://www.youtube.com/watch?v=ej08u5xPa64
First we have to get inside postgres by using
sudo -u postgres psql postgres
Enter password for user postgres
Now the terminal will be like this:
postgres=#
Now enter the given line after postgres=#
CREATE USER username WITH PASSWORD 'your password';
(put your password inside quotes('') and don't forget semicolon(;)

Postgresql & OpenBSD first connexion

I don't understand how Postgres works with openBSD. I didn't have these problems with debian (I don't have to do the initdb).
I did as follow
pkg_add postgresql-server php-pgsql
su - _postgresql
initdb -D /var/postgresql/data -U postgres - E UTF8 -A md5 -W
But after that, I don't have the result that I expect
I can start the database with
pg_ctl -D /var/postgresql/data/ -l logfile start
or with
rcctl enable postgresql
rcctl start postgresql
But I don't understand how to connect to it
Because if I do:
# su - _postgresql
$ psql
Password:
psql: FATAL: password authentication failed for user "_postgresql"
Why it's the _postgresql user and not postgres?
Which password I'm supposed to use?
This is the pg_hba.conf, I changed the end,
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
# IPv4 local connections:
host all all 127.0.0.1/32
password
# IPv6 local connections:
host all all ::1/128 md5
So with this, I think, i'm login but I have a new probleme, there is really something I don't understand
$ pg_ctl -D /var/postgresql/data/ -l logfile stop
waiting for server to shut down.... done
server stopped
$ pg_ctl -D /var/postgresql/data/ -l logfile start
server starting
$ psql
psql: FATAL: role "_postgresql" does not exist
thanks
So the normal case when a create a new database is
With the user
su - _postgresql
initdb -D /var/postgresql/data -U postgres -k -E UTF8 -A md5 -W
and you have to chose a password
Start the database
pg_ctl -D /var/postgresql/data/ -l logfile start
And you can easily login with
psql -U postgres
But if it didn't work, i suppose i did a mistake with the password
With the user
su - _postgresql
First I need to change the ph_hba.conf to trust
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all trust
so when I start the database with
pg_ctl -D /var/postgresql/data/ -l logfile start
so I can login with the postgres user
psql -U postgres
And finaly change the password
ALTER USER postgres WITH PASSWORD '123';
Don't forget the " ; " at the end!
Change the pg_hba.conf file
First I need to change the ph_hba.conf to password (or maybe MD5)
# TYPE DATABASE USER ADDRESS METHOD
# "local" is for Unix domain socket connections only
local all all password
And restart
pg_ctl -D /var/postgresql/data/ -l logfile stop
pg_ctl -D /var/postgresql/data/ -l logfile start
And i can finaly login properly
psql -U postgres

Ecto Postgres install error password authentication failed

I created a phoenix project from the hello example using digital ocean. I entered the username and password from the etc/motd.tail file. I keep getting the error message below. I am a beginner and for some reason I just cannot get ecto to install correctly.
** (Mix) The database for Hello.Repo couldn't be created, reason given: psql: FATAL: password authentication failed for user "elixir"
FATAL: password authentication failed for user "elixir"
You can use the following Postgress database credentials:
* User: elixir
* Pass: ***
install. Any help would be appreciated.
I get the same error using Ubuntu 14.04 and I corrected resetting the 'postgres' password:
$ sudo -u postgres psql -c "ALTER USER postgres PASSWORD 'postgres';"
and restart postgres service:
sudo service postgresql restart
I assume this error is happening on the mix ecto.create task?
This happens because Ecto uses psql to create the database, however this is no longer the case in the upcoming Ecto 2.0.
The following GitHub issue shows the same issue https://github.com/elixir-lang/ecto/issues/1207
The relevant comment with the fix is https://github.com/elixir-lang/ecto/issues/1207#issuecomment-172570064:
My database config (pg_hba.conf) was apparently wrong.
For anyone else encountering this:
host all my_user 127.0.0.1/32 trust will not work
host all my_user localhost trust will work
Please check your pg_hba.conf (likely in /etc/postsgresql/9.x/pg_hba.conf).
We just need to create a new postgresql username and password according to the files inside config folder using this db method
$ sudo -u postgres createuser <username>
$ sudo -u postgres createdb <dbname>
$ sudo -u postgres psql
psql=# alter user <username> with encrypted password '<password>';
psql=# grant all privileges on database <dbname> to <username> ;
I needed to update the pg_hba.conf to make this work.
I am using Fedora, so get to /var/lib/pgsql/data
# "local" is for Unix domain socket connections only
local all postgres peer
local all all md5
# IPv4 local connections:
host all all 127.0.0.1/32 md5
# IPv6 local connections:
host all all ::1/128 ident
Then I created an elixir user in postgres with databse creation capabilities and configured it in dev.exs (user/password/database)

Creation a Database PostgreSQL 9.3 in Ubuntu

I'm trying to create a database PostgreSQL 9.3 in Ubuntu 14.04 LTS. I've installed the database and now I'm trying to create an user, password and a new database. This is what I've done in the Ubuntu shell:
Installation
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt-get install postgresql-9.3
Creation of the user "myuser"
sudo -u postgres createuser myuser
Creation of the password
sudo -u postgres psql
postgres=# \password
Enter new password: bla bla...
Enter it again: bla bla...
Creation of the database "newdb"
createdb newdb -O myuser
But I get this error
createdb: could not connect to database template1: FATAL: role "bla bla" does not exist
what can be the issue?
You need to delete and re-create your user as follows :
dropuser myuser
createuser -l myser -P
You will be prompted for the password.
That should do the trick. Hope this helps.
Ok, verify your pg_hba.conf.
First run :
locate pg_hba.conf
This should return the location of the postgresql host based authentifcation configuration file.
Then check that the following line is set accordingly:
# IPv4 local connections:
host all all 127.0.0.1/32 trust
This should enable passwordless access to your DB. You can try with:
psql -U postgres
Try it and let me know if you can connect.