Re: Advice needed on application/database authentication/authorization/auditing model - Mailing list pgsql-general

From Dmitriy Igrishin
Subject Re: Advice needed on application/database authentication/authorization/auditing model
Date
Msg-id AANLkTin0bUwsXF-YPQ81rC_xiacpQe+euCYktdU4Lp_P@mail.gmail.com
Whole thread Raw
In response to Re: Advice needed on application/database authentication/authorization/auditing model  (Peter Bex <Peter.Bex@xs4all.nl>)
Responses Re: Advice needed on application/database authentication/authorization/auditing model  (Peter Bex <Peter.Bex@xs4all.nl>)
List pgsql-general
Hey Peter,

2010/10/22 Peter Bex <Peter.Bex@xs4all.nl>
On Fri, Oct 22, 2010 at 12:21:17AM +0400, Dmitriy Igrishin wrote:
> Hey Tony,
>
> 2010/10/21 Tony Cebzanov <tonyceb@andrew.cmu.edu>
>
> > I have a web application with a Postgres backend.  In my initial
> > prototype, I decided not to have a Postgres database user created for
> > each application user, opting instead to use my own users table.
> >
> IMO, you are trying to reinvent the wheel. Although, you may do it just for
> fun. :-)

This is an interesting statement and I've wondered about this a couple
of times before.  It seems very common practice (at least with web
applications) to access a database from one user and do all
authentication and authorization checking in the application.

Is this a bad idea?  At first glance, it would indeed seem very
logical to make an application user match a database user, but how do
you do row-level permission checking?

For instance, very often I've had the situation where a web app stores
users, companies and <whatever>s.  The whatevers can be accessed only
to either the user who created them, or when they are either company-wide
assets or the user has company-wide privileges, can be accessed only
when the whatever was made by a user from the same company.

As far as I can see, this would imply either creating views on the
<whatever> for every user (or company?), or manually crafting queries
to do the same. The latter is of course what most webapps do, and it is
a frequent cause of errors and, hence, vulnerabilities.
Yes, liberal use of views and rules are the best solutions in this case IMO.
 

I'd love to hear some good advice on what has worked well for others.

Cheers,
Peter
--
http://sjamaan.ath.cx
--
"The process of preparing programs for a digital computer
 is especially attractive, not only because it can be economically
 and scientifically rewarding, but also because it can be an aesthetic
 experience much like composing poetry or music."
                                                       -- Donald Knuth



--
// Dmitriy.


pgsql-general by date:

Previous
From: Vick Khera
Date:
Subject: Re: Gripe: bytea_output default => data corruption
Next
From: Peter Bex
Date:
Subject: Re: Advice needed on application/database authentication/authorization/auditing model