2

I just installed PostgreSQL 13 on Windows 11. When I run the command psql by default it uses the user aaron, the name of my Windows user account. However, it asks me for a password. I have tried all passwords associated with my Windows account as well as the default password I set for the user postgres, none of which worked. I was able to log in with psql -U postgres, and I ran the command \du, and there was only one role in the list, postgres. Later I created the role aaron without specifying a password, but it still asks for a password.

So, did the user aaron exist initially or not? If not, then how was it the default user when I ran the psql command? What is the password for this user?

A. Kriegman
  • 510
  • 1
  • 4
  • 18

5 Answers5

1

So, did the user aaron exist initially or not

No, it did not. The only user that is created when installing Postgres (or more precisely: when running initdb) is postgres.

If not, then how was it the default user when I ran the psql command

Quote from the manual

The default user name is your operating-system user name, as is the default database name

psql simply uses the operating system user as the default username to connect to the server. It knows nothing about the database user(s) until it tries to connect with a specific username and potentially password.

You can set a different default through the (Windows) environment variable PGUSER

Later I created the role aaron without specifying a password, but it still asks for a password.

Whether or not a password is required is controlled through pg_hba.conf

0

When you run psql command and don't provide a username it considers (that the current system user which in your case is aaron) is the user you want to use to login and hence you see a user which really don't exists.

Now regarding the password you might want to check a file generally named as pg_hba.conf which hold the essentials of who can connect (IPs) what username can he have and should that user be asked for password.

Now generally you will find answers saying that find this file and write down trust everywhere (which basically means if some specific user from a specific IP access this database of replication then don't ask for a password and let him enter), which you should not do until and unless you are utterly sure the postgresql server is just just local and has no real-time purpose.

So concluding you want to create a user with some encrypted password and then provide necessary privilege.

P.S: I have tried all these on a linux machine, but the server configurations are more or less same.

cupid22
  • 161
  • 7
0

It's worth pointing out that PostgreSQL has it's own users and permissions independent of the OS. Some installers will automatically create a postgres OS user. I'm not sure what Windows does.

It seems that PostgreSQL can do Windows authentication. See this question for details on how to configure that.

As @a_horse_with_no_name has said, connection configuration is controlled by pg_hba.conf

bfris
  • 5,272
  • 1
  • 20
  • 37
0

PostgreSQL tries not to leak information about its users, so the failed-authentication attempt is not given much information about why it failed.

If you look in the server's log file, rather than the clients, you should first see messages about 'aaron' failing to authenticate because the user does not existing, and then (after you create it) about it failing to authenticate because it has no password assigned.

When you created the user, you should have assigned it a password if you wanted to use a password. Or as a superuser in psql, create it without a password and then assign one with \password aaron That way the password won't be visible on the screen, or in the log files.

jjanes
  • 37,812
  • 5
  • 27
  • 34
0

To give a concise, direct answer:

  1. right click on Windows icon and click “System”.

  2. scroll down to “Advanced System Settings”.

  3. click Environment Variables.

  4. in “System variables”, click “New”.
    Set Variable Name to PGUSER and Variable Value to postgres.
    Or, in cmd: set PGUSER=postgres, which also sets it globally.

  5. go to "Services" (in Task Manager), and restart the "postgresql-X64" service.

Matin Sasan
  • 1,835
  • 1
  • 13
  • 26