Subject: pgsql: Mention that PAM requires the user already exist in the database,

From: [email-masked] (Bruce Momjian)
Date: Tue, 26 Apr 2005 00:01:13 -0300 (ADT)

Log Message:
-----------
Mention that PAM requires the user already exist in the database, per
Dick Davies.

Modified Files:
--------------
    pgsql/doc/src/sgml:
        client-auth.sgml (r1.76 -> r1.77)
        (http://developer.postgresql.org/cvsweb.cgi/pgsql/doc/src/sgml/client-auth.sgml.diff?r1=1.76&r2=1.77)

---

From: Tom Lane <[email-masked]>
Date: Tue, 26 Apr 2005 01:16:54 -0400

> Mention that PAM requires the user already exist in the database, per

I don't recall exactly what Dick suggested, but the patch as applied
seems like fairly useless verbiage.  Exactly which of our other auth
methods allow users who *don't* exist in the database to log in?
And why would anyone find it surprising that this does not happen?

			regards, tom lane

---

From: Bruce Momjian <[email-masked]>
Date: Wed, 27 Apr 2005 12:03:54 -0400 (EDT)

> And why would anyone find it surprising that this does not happen?

Can someone comment if having to create the database user account to use
PAM is something that people forget?  Is there increased confusion
because PAM is usually used for the operating system usernames?

Attached is the addition I made to the docs recently.  Is it useful?

Here is the email that prompted the addition:

	http://archives.postgresql.org/pgsql-admin/2005-03/msg00189.php

-- 
  Bruce Momjian                        |  http://candle.pha.pa.us
  [email-masked]               |  (610) 359-1001
  +  If your life is a hard drive,     |  13 Roberts Road
  +  Christ can be your backup.        |  Newtown Square, Pennsylvania 19073
Index: client-auth.sgml
===================================================================
RCS file: /cvsroot/pgsql/doc/src/sgml/client-auth.sgml,v
retrieving revision 1.76
retrieving revision 1.77
diff -c -c -r1.76 -r1.77
*** client-auth.sgml	22 Apr 2005 04:18:58 -0000	1.76
--- client-auth.sgml	26 Apr 2005 03:01:09 -0000	1.77
***************
*** 883,890 ****
      default PAM service name is <literal>postgresql</literal>. You can
      optionally supply your own service name after the <literal>pam</>
      key word in the file <filename>pg_hba.conf</filename>.
!     For more information about PAM, please read the
!     <ulink url="http://www.kernel.org/pub/linux/libs/pam/">
      <productname>Linux-PAM</> Page</ulink>
      and the <ulink url="http://www.sun.com/software/solaris/pam/">
      <systemitem class="osname">Solaris</> PAM Page</ulink>.
--- 883,892 ----
      default PAM service name is <literal>postgresql</literal>. You can
      optionally supply your own service name after the <literal>pam</>
      key word in the file <filename>pg_hba.conf</filename>.
!     PAM is used only to validate username/password pairs.
!     The user must already exist in the database before PAM
!     can be used for authentication.  For more information about 
!     PAM, please read the <ulink url="http://www.kernel.org/pub/linux/libs/pam/">
      <productname>Linux-PAM</> Page</ulink>
      and the <ulink url="http://www.sun.com/software/solaris/pam/">
      <systemitem class="osname">Solaris</> PAM Page</ulink>.

---

From: Bruce Momjian <[email-masked]>
Date: Wed, 27 Apr 2005 12:08:32 -0400 (EDT)

I found more information at:

	http://itc.musc.edu/wiki/PostgreSQL

The issue is mentioned as:

	The first thing you will need to do is create your accounts. Due to the
	way postgres is coded, you will have to create accounts on the actual
	database system with usernames that match the ones in your LDAP
	repository. This is done with the createuser statement.

The issue is that having the user known by PAM (in this case, LDAP),
isn't enough to use PAM.  You also have to have the person created in
PostgreSQL.

---------------------------------------------------------------------------

> 
> ---------------------------(end of broadcast)---------------------------
> TIP 9: the planner will ignore your desire to choose an index scan if your
>       joining column's datatypes do not match

---

From: "Joshua D. Drake" <[email-masked]>
Date: Wed, 27 Apr 2005 09:18:18 -0700

>>And why would anyone find it surprising that this does not happen?

Never assume, always be explicit.

Sincerely,

Joshua D. Drake
Command Prompt, Inc.

-- 
Your PostgreSQL solutions company - Command Prompt, Inc. 1.800.492.2240
PostgreSQL Replication, Consulting, Custom Programming, 24x7 support
Managed Services, Shared and Dedication Hosting
Co-Authors: plPHP, plPerlNG - http://www.commandprompt.com/

---

From: Alvaro Herrera <[email-masked]>
Date: Wed, 27 Apr 2005 12:31:20 -0400

> Attached is the addition I made to the docs recently.  Is it useful?

Yes, because PAM works different on other systems, specially if it's
configured to use LDAP or some such.  Though I'd rephrase with something
like

> !     Note that PAM is only used to validate username/password pairs;
> !     therefore, the user must already exist in the database before PAM

-- 
Alvaro Herrera (<alvherre[@]dcc.uchile.cl>)
"Porque francamente, si para saber manejarse a uno mismo hubiera que
rendir examen... ¿Quién es el machito que tendría carnet?"  (Mafalda)

---

From: Bruce Momjian <[email-masked]>
Date: Wed, 27 Apr 2005 16:11:16 -0400 (EDT)

> > !     PAM, please read the <ulink url="http://www.kernel.org/pub/linux/libs/pam/">

OK, update done:

    PAM is used only to validate username/password pairs.
    Therefore the user must already exist in the database before PAM
    can be used for authentication.

---

From: Peter Eisentraut <[email-masked]>
Date: Fri, 29 Apr 2005 00:23:33 +0200

> And why would anyone find it surprising that this does not happen?

I think the difference is that PAM carries a user list of its own, and 
users might be led to believe that it's enough to create a user in the 
PAM system and it will automatically exist in the database.

With the other authentication methods, there is no external user list.

-- 
Peter Eisentraut
http://developer.postgresql.org/~petere/