Rejecting weak passwords

Started by Laurenz Albeover 16 years ago156 messageshackers
Jump to latest
#1Laurenz Albe
laurenz.albe@cybertec.at

Dear hackers,

I have been thinking about ways to have PostgreSQL reject
weak passwords.

I think the standard recommendation is "use PAM and LDAP",
but that requires the user to change the password outside
of PostgreSQL. And who would want to setup and maintain an
LDAP server just for this?

Since everybody has different ideas what is a good password,
there should be some way to configure that. I've looked at
how Oracle does it, and they simply let you write a
stored procedure that throws an exception if it doesn't
like the password.
Since users are on cluster level and functions live in
databases, that won't work in PostgreSQL.

I have come up with an idea or two and like to hear your
opinion.

1) One could have a set of GUCs like min_password_length,
min_password_nonchars and similar that everybody
could configure. This is not extremely flexible though.
2) Another idea would be a GUC that contains a regular
expression that a password may *not* match.
Perhaps that's too limiting too.
3) I have also considered a GUC that points to a loadable
module that performs the password check if set.

Are there better ways?

Yours,
Laurenz Albe

#2Magnus Hagander
magnus@hagander.net
In reply to: Laurenz Albe (#1)
Re: Rejecting weak passwords

On 28 sep 2009, at 11.54, "Albe Laurenz" <laurenz.albe@wien.gv.at>
wrote:

Dear hackers,

I have been thinking about ways to have PostgreSQL reject
weak passwords.

I think the standard recommendation is "use PAM and LDAP",
but that requires the user to change the password outside
of PostgreSQL. And who would want to setup and maintain an
LDAP server just for this?

Since everybody has different ideas what is a good password,
there should be some way to configure that. I've looked at
how Oracle does it, and they simply let you write a
stored procedure that throws an exception if it doesn't
like the password.
Since users are on cluster level and functions live in
databases, that won't work in PostgreSQL.

I have come up with an idea or two and like to hear your
opinion.

1) One could have a set of GUCs like min_password_length,
min_password_nonchars and similar that everybody
could configure. This is not extremely flexible though.
2) Another idea would be a GUC that contains a regular
expression that a password may *not* match.
Perhaps that's too limiting too.
3) I have also considered a GUC that points to a loadable
module that performs the password check if set.

Are there better ways?

Isn't there some library we can link with and (conditionally) use? I
believe windows exposes api function(s) to let you verify password
complexity - I'm sure there is something similar available on unix,
hopefully included on most common platforms?

/Magnus

#3Andrew Dunstan
andrew@dunslane.net
In reply to: Laurenz Albe (#1)
Re: Rejecting weak passwords

Albe Laurenz wrote:

Dear hackers,

I have been thinking about ways to have PostgreSQL reject
weak passwords.

I think the standard recommendation is "use PAM and LDAP",
but that requires the user to change the password outside
of PostgreSQL. And who would want to setup and maintain an
LDAP server just for this?

Since everybody has different ideas what is a good password,
there should be some way to configure that. I've looked at
how Oracle does it, and they simply let you write a
stored procedure that throws an exception if it doesn't
like the password.
Since users are on cluster level and functions live in
databases, that won't work in PostgreSQL.

I have come up with an idea or two and like to hear your
opinion.

1) One could have a set of GUCs like min_password_length,
min_password_nonchars and similar that everybody
could configure. This is not extremely flexible though.
2) Another idea would be a GUC that contains a regular
expression that a password may *not* match.
Perhaps that's too limiting too.
3) I have also considered a GUC that points to a loadable
module that performs the password check if set.

My vote is for #3, if anything.

cheers

andrew

#4Stephen Frost
sfrost@snowman.net
In reply to: Magnus Hagander (#2)
Re: Rejecting weak passwords

* Magnus Hagander (magnus@hagander.net) wrote:

Are there better ways?

Isn't there some library we can link with and (conditionally) use? I
believe windows exposes api function(s) to let you verify password
complexity - I'm sure there is something similar available on unix,
hopefully included on most common platforms?

cracklib2.

Stephen

In reply to: Andrew Dunstan (#3)
Re: Rejecting weak passwords

Andrew Dunstan escribió:

Albe Laurenz wrote:

Dear hackers,

I have been thinking about ways to have PostgreSQL reject
weak passwords.

I think the standard recommendation is "use PAM and LDAP",
but that requires the user to change the password outside
of PostgreSQL. And who would want to setup and maintain an
LDAP server just for this?

Since everybody has different ideas what is a good password,
there should be some way to configure that. I've looked at
how Oracle does it, and they simply let you write a
stored procedure that throws an exception if it doesn't
like the password.
Since users are on cluster level and functions live in
databases, that won't work in PostgreSQL.

I have come up with an idea or two and like to hear your
opinion.

1) One could have a set of GUCs like min_password_length,
min_password_nonchars and similar that everybody
could configure. This is not extremely flexible though.
2) Another idea would be a GUC that contains a regular
expression that a password may *not* match.
Perhaps that's too limiting too.
3) I have also considered a GUC that points to a loadable
module that performs the password check if set.

My vote is for #3, if anything.

cheers

andrew

You have to analyze all points before to do this. I vote too for the
third option, but you have to be clear that how do you ´ll check the
weakness of the password:
1- For example: the length should be greater that 6 char..
2- The password should be have a combination fo numbers, letters and
others dots

Things like that you have to think very well, or to do a question to the
list asking which are the best options.

I think the same about the PAM and LDAP auth

Regards

--
"DBAs must implements decisions based on the best fit of the application,DBMS, and platform
......for that reason.......I use PostgreSQL + Linux"

Ing. Marcos L. Ortiz Valmaseda
Línea Soporte y Despliegue
Centro de Tecnologías de Almacenamiento y Análisis de Datos (CENTALAD)

Linux User # 418229
PostgreSQL User
http://www.postgresql.org
http://www.planetpostgresql.org/
http://www.postgresql-es.org/

#6Bill Moran
wmoran@potentialtech.com
In reply to: Marcos Luis Ortiz Valmaseda (#5)
Re: Rejecting weak passwords

In response to "Ing. Marcos L. Ortí­z Valmaseda" <mlortiz@uci.cu>:

Andrew Dunstan escribió:

Albe Laurenz wrote:

Dear hackers,

I have been thinking about ways to have PostgreSQL reject
weak passwords.

I think the standard recommendation is "use PAM and LDAP",
but that requires the user to change the password outside
of PostgreSQL. And who would want to setup and maintain an
LDAP server just for this?

An option here is to have a way for PG to hook in to LDAP/PAM so
that an ALTER ROLE actually changes the LDAP/PAM password.

Since everybody has different ideas what is a good password,
there should be some way to configure that. I've looked at
how Oracle does it, and they simply let you write a
stored procedure that throws an exception if it doesn't
like the password.

[snip]

3) I have also considered a GUC that points to a loadable
module that performs the password check if set.

You have to analyze all points before to do this. I vote too for the
third option, but you have to be clear that how do you ´ll check the
weakness of the password:
1- For example: the length should be greater that 6 char..
2- The password should be have a combination fo numbers, letters and
others dots

I think you've missed the point. If a loadable module is used, then
it can do anything the DBAs need it to. You can write your own module
if you're not happy with those provided. At that point, arguing about
what makes a good password is pretty irrelevant. Note the paragraph
that I didn't snip where Albe points this out.

--
Bill Moran
http://www.potentialtech.com
http://people.collaborativefusion.com/~wmoran/

#7Magnus Hagander
magnus@hagander.net
In reply to: Stephen Frost (#4)
Re: Rejecting weak passwords

2009/9/28 Stephen Frost <sfrost@snowman.net>:

* Magnus Hagander (magnus@hagander.net) wrote:

Are there better ways?

Isn't there some library we can link with and (conditionally) use? I
believe windows exposes api function(s) to let you verify password
complexity - I'm sure there is something similar available on unix,
hopefully included on most common platforms?

cracklib2.

That sounds like the one I thought about :-)

--
Magnus Hagander
Me: http://www.hagander.net/
Work: http://www.redpill-linpro.com/

#8Andrew Dunstan
andrew@dunslane.net
In reply to: Marcos Luis Ortiz Valmaseda (#5)
Re: Rejecting weak passwords

Ing. Marcos L. Ortí­z Valmaseda wrote:

My vote is for #3, if anything.

You have to analyze all points before to do this. I vote too for the
third option, but you have to be clear that how do you ´ll check the
weakness of the password:
1- For example: the length should be greater that 6 char..
2- The password should be have a combination fo numbers, letters and
others dots

Things like that you have to think very well, or to do a question to
the list asking which are the best options.

I think the same about the PAM and LDAP auth

I'm voting for #3 precisely so postgres doesn't have to think about it,
and the module author will do all the work implementing whatever rules
they want to enforce.

cheers

andrew

#9Magnus Hagander
magnus@hagander.net
In reply to: Andrew Dunstan (#8)
Re: Rejecting weak passwords

2009/9/28 Andrew Dunstan <andrew@dunslane.net>:

Ing. Marcos L. Ortí­z Valmaseda wrote:

My vote is for #3, if anything.

You have to analyze all points before to do this. I vote too for the third option, but you have to be clear that how do you ´ll check the weakness of the password:
1- For example: the length should be greater that 6 char..
2- The password should be have  a combination fo numbers, letters and others dots

Things like that you have to think very well, or to do a question to the list asking which are the best options.

I think the same about the PAM and LDAP auth

I'm voting for #3 precisely so postgres doesn't have to think about it, and the module author will do all the work implementing whatever rules they want to enforce.

That makes a lot of sense. Then we could perhaps ship a cracklib2
provider in contrib.

--
Magnus Hagander
Me: http://www.hagander.net/
Work: http://www.redpill-linpro.com/

#10Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#3)
Re: Rejecting weak passwords

Andrew Dunstan <andrew@dunslane.net> writes:

Albe Laurenz wrote:

1) One could have a set of GUCs like min_password_length,
min_password_nonchars and similar that everybody
could configure. This is not extremely flexible though.
2) Another idea would be a GUC that contains a regular
expression that a password may *not* match.
Perhaps that's too limiting too.
3) I have also considered a GUC that points to a loadable
module that performs the password check if set.

My vote is for #3, if anything.

Yeah. I think there is no chance of anything in this vein getting
accepted into core Postgres, if only because everybody will have a
different idea of what it needs to do. A hook function (no need
for a GUC) would be a reasonable proposal.

regards, tom lane

#11Tom Lane
tgl@sss.pgh.pa.us
In reply to: Magnus Hagander (#9)
Re: Rejecting weak passwords

Actually there's a much bigger problem with asking the backend to reject
weak passwords: what ya gonna do with a pre-MD5'd string? Which is
exactly what the backend is going to always get, in a security-conscious
environment.

regards, tom lane

#12Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Tom Lane (#11)
Re: Rejecting weak passwords

Tom Lane wrote:

Actually there's a much bigger problem with asking the backend to reject
weak passwords: what ya gonna do with a pre-MD5'd string? Which is
exactly what the backend is going to always get, in a security-conscious
environment.

You mean if the password is set with
CREATE/ALTER ROLE x ENCRYPTED PASSWORD 'md5string' ?
That could not be checked of course...

I'm thinking of the case where somebody changes his or her
password interactively on the command line, with pgAdmin III,
or similar. People would hardly use the above in that case,
and you can do it safely over SSL encrypted connections.

Given the feedback by everybody (thanks!) I will investigate
the option of a loadable module or some other kind of hook.

Is there code in PostgreSQL that uses something like that
to get me started?

Yours,
Laurenz Albe

#13Tom Lane
tgl@sss.pgh.pa.us
In reply to: Laurenz Albe (#12)
Re: Rejecting weak passwords

"Albe Laurenz" <laurenz.albe@wien.gv.at> writes:

Tom Lane wrote:

Actually there's a much bigger problem with asking the backend to reject
weak passwords: what ya gonna do with a pre-MD5'd string? Which is
exactly what the backend is going to always get, in a security-conscious
environment.

I'm thinking of the case where somebody changes his or her
password interactively on the command line, with pgAdmin III,
or similar. People would hardly use the above in that case,

Really? If pgAdmin has a password-change function that doesn't use
client-side password encryption then somebody should file a bug against
it. Sending unencrypted passwords exposes the password at least to the
postmaster logfile. createuser has been doing encryption, unless
specifically commanded not to, for a long time.

regards, tom lane

#14Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#13)
Re: Rejecting weak passwords

On Mon, Sep 28, 2009 at 4:38 PM, Tom Lane <tgl@sss.pgh.pa.us> wrote:

"Albe Laurenz" <laurenz.albe@wien.gv.at> writes:

Tom Lane wrote:

Actually there's a much bigger problem with asking the backend to reject
weak passwords: what ya gonna do with a pre-MD5'd string?  Which is
exactly what the backend is going to always get, in a security-conscious
environment.

I'm thinking of the case where somebody changes his or her
password interactively on the command line, with pgAdmin III,
or similar. People would hardly use the above in that case,

Really?  If pgAdmin has a password-change function that doesn't use
client-side password encryption then somebody should file a bug against
it.  Sending unencrypted passwords exposes the password at least to the
postmaster logfile.  createuser has been doing encryption, unless
specifically commanded not to, for a long time.

pgAdmin MD5's the passwords if you use the GUI to change them, or when
add a user. It doesn't make any attempt to parse the SQL if you enter
it yourself in the query tool though (nor is it going to).

--
Dave Page
EnterpriseDB UK: http://www.enterprisedb.com

#15Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#14)
Re: Rejecting weak passwords

Dave Page <dpage@pgadmin.org> writes:

pgAdmin MD5's the passwords if you use the GUI to change them, or when
add a user. It doesn't make any attempt to parse the SQL if you enter
it yourself in the query tool though (nor is it going to).

No, I wouldn't expect it to go that far. My point is just that
pre-MD5'd passwords are a lot commoner than Albe seems to think.

regards, tom lane

#16Marko Kreen
markokr@gmail.com
In reply to: Tom Lane (#11)
Re: Rejecting weak passwords

On 9/28/09, Tom Lane <tgl@sss.pgh.pa.us> wrote:

Actually there's a much bigger problem with asking the backend to reject
weak passwords: what ya gonna do with a pre-MD5'd string? Which is
exactly what the backend is going to always get, in a security-conscious
environment.

Hmm... Looking at the docs, I don't see anywhere mention that the MD5
hashed passwords can still be used to log in, that only thing MD5'ing
protects from is actually knowing what the password was.

Also, although it does protect from sniffing password at login time,
it is as insecure as plaintext password against sniffing on
CREATE/ALTER USER time.

Thus only secure way to change password is over SSL, in which case
it does not make much difference whether it's plaintext or not.
Logfile may seem to be as argument against plaintext, but note
that you still cannot allow unprivileged users to access logfile
that may contain MD5 passwords, as they can use them to log in
as another user.

So promoting the ENCRYPTED 'foo' as "secure" may lure users into
false sense of security, and be lax against sniffing and logfile
protection.

Better approach seems to be simply refuse to log the password
value into logfile, whether it's MD5 or not, and promote SSL
as only secure way of changing passwords.

IOW, having plaintext password in CREATE/ALTER time which can
then checked for weaknesses is better that MD5 password, which
actually does not increase security.

We just need to fix the logging.

--
marko

#17Tom Lane
tgl@sss.pgh.pa.us
In reply to: Marko Kreen (#16)
Re: Rejecting weak passwords

Marko Kreen <markokr@gmail.com> writes:

So promoting the ENCRYPTED 'foo' as "secure" may lure users into
false sense of security, and be lax against sniffing and logfile
protection.

This argument is entirely irrelevant to the point. Yes, ENCRYPTED
doesn't fix everything, but it is still good practice to use it
and most well-written tools will. So having a weak-password detector
that can only work on non-encrypted passwords is going to not be
very helpful.

IOW, having plaintext password in CREATE/ALTER time which can
then checked for weaknesses is better that MD5 password, which
actually does not increase security.

This is not acceptable and will not happen. The case that ENCRYPTED
protects against is database superusers finding out other users'
original passwords, which is a security issue to the extent that those
users have used the same/similar passwords for other systems.
We're not going to give up protection for that in order to provide
an option to do weak-password checking in a place that simply isn't
the best place to do it anyway.

regards, tom lane

#18Robert Haas
robertmhaas@gmail.com
In reply to: Marko Kreen (#16)
Re: Rejecting weak passwords

On Mon, Sep 28, 2009 at 2:00 PM, Marko Kreen <markokr@gmail.com> wrote:

So promoting the ENCRYPTED 'foo' as "secure" may lure users into
false sense of security, and be lax against sniffing and logfile
protection.

ENCRYPTED prevents the user's password from being stolen by a modified server.

...Robert

#19marcin mank
marcin.mank@gmail.com
In reply to: Tom Lane (#17)
Re: Rejecting weak passwords

The case that ENCRYPTED
protects against is database superusers finding out other users'
original passwords, which is a security issue to the extent that those
users have used the same/similar passwords for other systems.

I just want to note that md5 is not much of a protection against this
case these days. Take a look at this:
http://www.golubev.com/hashgpu.htm

It takes about 32 hours to brute force all passwords from [a-zA-Z0-9]
of up to 8 chars in length.

Maybe it is time to look at something like bcrypt.
http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html

Greetings
Marcin

#20Josh Berkus
josh@agliodbs.com
In reply to: marcin mank (#19)
Re: Rejecting weak passwords

It takes about 32 hours to brute force all passwords from [a-zA-Z0-9]
of up to 8 chars in length.

That would be a reason to limit the number of failed connection attempts
from a single source, then, rather than a reason to change the hash
function.

Hmmm, that would be a useful, easy (I think) security feature: add a GUC
for failed_logins_allowed.

--
Josh Berkus
PostgreSQL Experts Inc.
www.pgexperts.com

#21Joshua D. Drake
jd@commandprompt.com
In reply to: Josh Berkus (#20)
#22Jeff Davis
pgsql@j-davis.com
In reply to: Josh Berkus (#20)
#23Andrew Dunstan
andrew@dunslane.net
In reply to: Jeff Davis (#22)
#24Tom Lane
tgl@sss.pgh.pa.us
In reply to: Josh Berkus (#20)
#25Tom Lane
tgl@sss.pgh.pa.us
In reply to: marcin mank (#19)
#26Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Tom Lane (#15)
#27Peter Eisentraut
peter_e@gmx.net
In reply to: Joshua D. Drake (#21)
#28Gurjeet Singh
singh.gurjeet@gmail.com
In reply to: Tom Lane (#24)
#29Tom Lane
tgl@sss.pgh.pa.us
In reply to: Laurenz Albe (#26)
#30Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#29)
#31Andrew Dunstan
andrew@dunslane.net
In reply to: Robert Haas (#30)
#32Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#30)
#33Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#31)
#34Mark Mielke
mark@mark.mielke.cc
In reply to: Gurjeet Singh (#28)
#35Josh Berkus
josh@agliodbs.com
In reply to: Mark Mielke (#34)
#36Mark Mielke
mark@mark.mielke.cc
In reply to: Josh Berkus (#35)
#37Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Tom Lane (#33)
#38Dave Page
dpage@pgadmin.org
In reply to: Laurenz Albe (#37)
#39Andrew Dunstan
andrew@dunslane.net
In reply to: Dave Page (#38)
#40Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Andrew Dunstan (#39)
#41Magnus Hagander
magnus@hagander.net
In reply to: Laurenz Albe (#40)
In reply to: Magnus Hagander (#41)
#43Aidan Van Dyk
aidan@highrise.ca
In reply to: Laurenz Albe (#37)
#44Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Aidan Van Dyk (#43)
#45Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#38)
#46Magnus Hagander
magnus@hagander.net
In reply to: Tom Lane (#45)
#47Tom Lane
tgl@sss.pgh.pa.us
In reply to: Magnus Hagander (#46)
In reply to: Magnus Hagander (#46)
#49Magnus Hagander
magnus@hagander.net
In reply to: Tom Lane (#47)
In reply to: Tom Lane (#47)
#51Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#47)
#52Tom Lane
tgl@sss.pgh.pa.us
In reply to: Magnus Hagander (#49)
#53Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#52)
#54Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Bruce Momjian (#53)
#55Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Laurenz Albe (#54)
#56Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Laurenz Albe (#55)
#57Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#17)
#58Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#57)
#59Andrew Dunstan
andrew@dunslane.net
In reply to: Tom Lane (#58)
#60Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#58)
#61Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#60)
#62Marko Kreen
markokr@gmail.com
In reply to: Dave Page (#57)
#63Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#61)
#64Robert Haas
robertmhaas@gmail.com
In reply to: Dave Page (#63)
#65Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#63)
#66Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#65)
#67Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#66)
#68Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#67)
#69Magnus Hagander
magnus@hagander.net
In reply to: Tom Lane (#67)
#70Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#68)
#71Tom Lane
tgl@sss.pgh.pa.us
In reply to: Magnus Hagander (#69)
#72Bruce Momjian
bruce@momjian.us
In reply to: Magnus Hagander (#69)
#73Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#67)
#74Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#73)
#75Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#72)
#76Dave Page
dpage@pgadmin.org
In reply to: Bruce Momjian (#75)
#77Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#71)
#78Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#74)
#79Mark Mielke
mark@mark.mielke.cc
In reply to: Tom Lane (#67)
#80Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#76)
#81Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#80)
#82Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#81)
#83Kevin Grittner
Kevin.Grittner@wicourts.gov
In reply to: Dave Page (#81)
#84Tom Lane
tgl@sss.pgh.pa.us
In reply to: Kevin Grittner (#83)
#85Dave Page
dpage@pgadmin.org
In reply to: Kevin Grittner (#83)
#86Kevin Grittner
Kevin.Grittner@wicourts.gov
In reply to: Tom Lane (#84)
#87Kevin Grittner
Kevin.Grittner@wicourts.gov
In reply to: Dave Page (#85)
#88Dave Page
dpage@pgadmin.org
In reply to: Kevin Grittner (#87)
#89Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#84)
#90Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#70)
#91Mark Mielke
mark@mark.mielke.cc
In reply to: Dave Page (#85)
#92Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#90)
#93Peter Eisentraut
peter_e@gmx.net
In reply to: Tom Lane (#71)
#94Peter Eisentraut
peter_e@gmx.net
In reply to: Magnus Hagander (#69)
#95Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#89)
#96Mark Mielke
mark@mark.mielke.cc
In reply to: Dave Page (#88)
#97Mark Mielke
mark@mark.mielke.cc
In reply to: Peter Eisentraut (#94)
#98Stephen Frost
sfrost@snowman.net
In reply to: Tom Lane (#92)
#99Dave Page
dpage@pgadmin.org
In reply to: Mark Mielke (#91)
#100Dave Page
dpage@pgadmin.org
In reply to: Stephen Frost (#98)
#101Kevin Grittner
Kevin.Grittner@wicourts.gov
In reply to: Dave Page (#88)
#102Dave Page
dpage@pgadmin.org
In reply to: Kevin Grittner (#101)
#103Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Mark Mielke (#79)
#104Mark Mielke
mark@mark.mielke.cc
In reply to: Dave Page (#99)
#105Mark Mielke
mark@mark.mielke.cc
In reply to: Dave Page (#102)
#106Mark Mielke
mark@mark.mielke.cc
In reply to: Laurenz Albe (#103)
#107Dave Page
dpage@pgadmin.org
In reply to: Mark Mielke (#105)
#108Ron Mayer
rm_pg@cheapcomplexdevices.com
In reply to: Mark Mielke (#105)
#109Josh Berkus
josh@agliodbs.com
In reply to: Dave Page (#107)
#110Robert Haas
robertmhaas@gmail.com
In reply to: Mark Mielke (#104)
#111Tom Lane
tgl@sss.pgh.pa.us
In reply to: Robert Haas (#110)
#112Dave Page
dpage@pgadmin.org
In reply to: Josh Berkus (#109)
#113Dave Page
dpage@pgadmin.org
In reply to: Tom Lane (#111)
#114Robert Haas
robertmhaas@gmail.com
In reply to: Dave Page (#113)
#115Dave Page
dpage@pgadmin.org
In reply to: Robert Haas (#114)
#116Mark Mielke
mark@mark.mielke.cc
In reply to: Dave Page (#112)
#117Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#113)
#118Tom Lane
tgl@sss.pgh.pa.us
In reply to: Dave Page (#115)
#119Mark Mielke
mark@mark.mielke.cc
In reply to: Dave Page (#115)
#120Dave Page
dpage@pgadmin.org
In reply to: Mark Mielke (#119)
#121Ron Mayer
rm_pg@cheapcomplexdevices.com
In reply to: Dave Page (#120)
#122Dave Page
dpage@pgadmin.org
In reply to: Ron Mayer (#121)
#123Bruce Momjian
bruce@momjian.us
In reply to: Dave Page (#122)
#124Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#111)
#125Tom Lane
tgl@sss.pgh.pa.us
In reply to: Bruce Momjian (#124)
#126Mark Mielke
mark@mark.mielke.cc
In reply to: Bruce Momjian (#123)
#127Bruce Momjian
bruce@momjian.us
In reply to: Bruce Momjian (#123)
#128Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#125)
#129Bruce Momjian
bruce@momjian.us
In reply to: Mark Mielke (#126)
#130Ron Mayer
rm_pg@cheapcomplexdevices.com
In reply to: Bruce Momjian (#123)
#131Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Bruce Momjian (#128)
#132Peter Eisentraut
peter_e@gmx.net
In reply to: Robert Haas (#110)
#133Peter Eisentraut
peter_e@gmx.net
In reply to: Laurenz Albe (#131)
#134Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Peter Eisentraut (#133)
#135Robert Haas
robertmhaas@gmail.com
In reply to: Peter Eisentraut (#132)
#136Tom Lane
tgl@sss.pgh.pa.us
In reply to: Laurenz Albe (#131)
#137Peter Eisentraut
peter_e@gmx.net
In reply to: Laurenz Albe (#134)
#138Tom Lane
tgl@sss.pgh.pa.us
In reply to: Peter Eisentraut (#137)
#139Alvaro Herrera
alvherre@2ndquadrant.com
In reply to: Tom Lane (#138)
#140Andrew Dunstan
andrew@dunslane.net
In reply to: Alvaro Herrera (#139)
#141Tom Lane
tgl@sss.pgh.pa.us
In reply to: Tom Lane (#138)
#142Tom Lane
tgl@sss.pgh.pa.us
In reply to: Andrew Dunstan (#140)
#143Bruce Momjian
bruce@momjian.us
In reply to: Tom Lane (#136)
#144Magnus Hagander
magnus@hagander.net
In reply to: Tom Lane (#141)
#145Tom Lane
tgl@sss.pgh.pa.us
In reply to: Magnus Hagander (#144)
#146Robert Haas
robertmhaas@gmail.com
In reply to: Tom Lane (#145)
#147ITAGAKI Takahiro
itagaki.takahiro@oss.ntt.co.jp
In reply to: Laurenz Albe (#56)
#148Laurenz Albe
laurenz.albe@cybertec.at
In reply to: ITAGAKI Takahiro (#147)
#149Heikki Linnakangas
heikki.linnakangas@enterprisedb.com
In reply to: Laurenz Albe (#148)
#150Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Heikki Linnakangas (#149)
#151ITAGAKI Takahiro
itagaki.takahiro@oss.ntt.co.jp
In reply to: Laurenz Albe (#150)
#152Laurenz Albe
laurenz.albe@cybertec.at
In reply to: ITAGAKI Takahiro (#151)
#153Tom Lane
tgl@sss.pgh.pa.us
In reply to: ITAGAKI Takahiro (#151)
#154Tom Lane
tgl@sss.pgh.pa.us
In reply to: ITAGAKI Takahiro (#151)
#155Laurenz Albe
laurenz.albe@cybertec.at
In reply to: Tom Lane (#154)
#156Tom Lane
tgl@sss.pgh.pa.us
In reply to: Laurenz Albe (#155)