Re: Getting a DB password to work without editing pg_hba.conf, - Mailing list pgsql-general

From Madison Kelly
Subject Re: Getting a DB password to work without editing pg_hba.conf,
Date
Msg-id 43A31EEC.9010600@alteeve.com
Whole thread Raw
In response to Re: Getting a DB password to work without editing pg_hba.conf,  (Martijn van Oosterhout <kleptog@svana.org>)
Responses Re: Getting a DB password to work without editing pg_hba.conf,
List pgsql-general
Martijn van Oosterhout wrote:
> On Fri, Dec 16, 2005 at 02:09:52PM -0500, Madison Kelly wrote:
>
>>May I ask then? What *is* considered "best practices" for securing a
>>database in PostgreSQL? Assuming I leave the 'pg_hba.conf' file at it's
>>default values, is there any real point to having a password on a
>>postgresql user account? I've been reading the docs but I guess I am
>>overthinking the problem or missing something obvious. :p
>
>
> If someone can login without being asked for a password, that generally
> means the system is setup not to ask. I'm not sure what you mean by
> "default" configuration, since you are probably using the one installed
> by your distro.
>
> It's very hard to see what the problem is unless you post your full
> pg_hba.conf and the actual command-lines you used, including which UNIX
> user you used. The two lines you gave would allow the postgres UNIX
> user to login to any database as himself without a password, and allow
> foo into bar with md5 authentication. If you are seeing something else
> you should be explicit how you're logging in.
>
> Have a nice day,

Oh shoot, I really wasn't very verbose, was I? Sorry about that.

I am running Debian Sarge with the debian-provided PostgreSQL 7.4 deb
pakage. The 'pg_hba.conf' file I am using (unedited from the one that
was installed with most comments removed) is:

# TYPE  DATABASE    USER        IP-ADDRESS        IP-MASK           METHOD
# Database administrative login by UNIX sockets
local   all         postgres
ident sameuser
#
# All other connections by UNIX sockets
local   all         all
ident sameuser
#
# All IPv4 connections from localhost
host    all         all         127.0.0.1         255.255.255.255
ident sameuser
#
# All IPv6 localhost connections
host    all         all         ::1
ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff        ident sameuser
host    all         all         ::ffff:127.0.0.1/128
ident sameuser
#
# reject all other connection attempts
host    all         all         0.0.0.0           0.0.0.0           reject


   That is without the line I added there anymore.

   After creating the database and the user this is what I have
(connected to 'template1' as 'postgres'):

template1=# SELECT * FROM pg_database;
   datname  | datdba | encoding | datistemplate | datallowconn |
datlastsysoid | datvacuumxid | datfrozenxid | datpath | datconfig |
      datacl

-----------+--------+----------+---------------+--------------+---------------+--------------+--------------+---------+-----------+--------------------------
  tle-bu    |    100 |        8 | f             | t            |
  17140 |          735 |   3221226208 |         |           |
  template1 |      1 |        8 | t             | t            |
  17140 |          735 |   3221226208 |         |           |
{postgres=C*T*/postgres}
  template0 |      1 |        8 | t             | f            |
  17140 |          464 |          464 |         |           |
{postgres=C*T*/postgres}
(3 rows)

template1=# SELECT * FROM pg_shadow;
  usename  | usesysid | usecreatedb | usesuper | usecatupd |
    passwd                | valuntil | useconfig
----------+----------+-------------+----------+-----------+-------------------------------------+----------+-----------
  postgres |        1 | t           | t        | t         |
                          |          |
  tle-bu   |      100 | t           | f        | f         |
md562c7c93e482292a88903ac6b65cdb34c |          |
(2 rows)


   You can see that I have created a password for the 'tle-bu' user. Now
when I try to connect I get the "psql: FATAL:  IDENT authentication
failed for user "tle-bu"" error when I try to connect from the 'madison'
shell account using:

$ psql tle-bu -U tle-bu

   Which is good. Though, if I add the user 'madison' to the database as
a user and create a database owned by her:

template1=# CREATE USER madison;
CREATE USER
template1=# CREATE DATABASE "test" OWNER "madison";
CREATE DATABASE

   And then connect to the 'test' database as the user 'madison' I can
then use '\c' to connect to the 'tle-bu' database:

$ psql test -U madison
Welcome to psql 7.4.7, the PostgreSQL interactive terminal.

Type:  \copyright for distribution terms
        \h for help with SQL commands
        \? for help on internal slash commands
        \g or terminate with semicolon to execute query
        \q to quit

test=> \c tle-bu
You are now connected to database "tle-bu".
tle-bu=>


   So ultimately my question becomes; How can I prevent other valid
postgres database users from connecting to the 'tle-bu' database
('postgres' being the obvious exception)? Can I do this with some
combination of GRANT and/or REVOKE? If so, does 'GRANT...' restrict
access to only the user(s) mentioned once it is used or do I need to
'REVOKE...' other users first and then 'GRANT...' the 'tle-bu' user?

   Or am I missing a design of postgresql (always likely. :P )?

   Thanks!!

Madison

--
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
           Madison Kelly (Digimer)
    TLE-BU; The Linux Experience, Back Up
Main Project Page:  http://tle-bu.org
Community Forum:    http://forum.tle-bu.org
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

pgsql-general by date:

Previous
From: Tom Lane
Date:
Subject: Re: Getting a DB password to work without editing pg_hba.conf,
Next
From: Jerry Sievers
Date:
Subject: 8.1 build on Solaris has LATIN9?