Re: RLS Design

From: Stephen Frost <sfrost(at)snowman(dot)net>
To: Robert Haas <robertmhaas(at)gmail(dot)com>
Cc: "Brightwell, Adam" <adam(dot)brightwell(at)crunchydatasolutions(dot)com>, PostgreSQL Hackers <pgsql-hackers(at)postgresql(dot)org>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, Dean Rasheed <dean(dot)a(dot)rasheed(at)gmail(dot)com>, Craig Ringer <craig(at)2ndquadrant(dot)com>, Yeb Havinga <yeb(dot)havinga(at)portavita(dot)nl>
Subject: Re: RLS Design
Date: 2014-09-11 20:36:10
Message-ID: 20140911203610.GG16422@tamriel.snowman.net
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

* Robert Haas (robertmhaas(at)gmail(dot)com) wrote:
> On Thu, Sep 11, 2014 at 3:08 PM, Stephen Frost <sfrost(at)snowman(dot)net> wrote:
> > The one thing I'm wondering about with this design is- what happens when
> > a policy is initially added? Currently, we automatically turn on RLS
> > for the table when that happens. I'm not thrilled with the idea that
> > you have to add policies AND turn on RLS explicitly- someone might add
> > policies but then forget to turn RLS on..
>
> Whoa. I think that's a bad idea. I think the default value for RLS
> should be disabled, and users should have to turn it on explicitly if
> they want to get it. It's arguable whether the behavior if you try to
> create a policy beforehand should be (1) outright failure or (2)
> command accepted but no effect, but I think (3) automagically enable
> the feature is a POLA violation. When somebody adds a policy and then
> drops it again, they will expect to be back in the same state they
> started out in, and for good reason.

Yeah, that I can agree with. Prior to adding the ability to explicitly
enable RLS, that's what they got, but that's changed now that we've made
the ability to turn on/off RLS half-way independent of policies. Also..

> > If we want to be able to disable RLS w/o dropping the policies, then I
> > think we have to completely de-couple the two and users would then have
> > both add policies AND turn on RLS to have RLS actually be enabled for a
> > given table. I'm on the fence about that.
>
> A strong +1 for doing just that. Look, anybody who is going to use
> row-level security but isn't careful enough to verify that it's
> actually working as desired after configuring it is a lost cause
> anyway.

I had been thinking the same, which is why I was on the fence about if
it was really an issue or not. This all amounts to actually making the
patch smaller also, which isn't a bad thing.

> Personally, I have to test every GRANT and REVOKE I
> issue, because there's no error for granting a privilege that the
> target already has or revoking one they don't, and with group
> membership and PUBLIC it's quite easy to have not done what you
> thought you did. Fixing that might be worthwhile but it doesn't take
> away from the fact that, like any other configuration change you make,
> security-relevant changes need to be tested.

Hmm, pretty sure that'd end up going against the spec too, but that's
a whole different discussion anyway.

> There is another possible advantage of the explicit-enable approach as
> well, which is that you might want to create several policies and then
> turn them all on at once. With what you have now, creating the first
> policy will enable RLS on the table and then everyone who wasn't the
> beneficiary of that initial policy is locked out. Now, granted, you
> can probably get around that by doing all of the operations in one
> transaction, so it's a minor point. But it's still nice to think
> about being able to add several policies and then flip them on. If it
> doesn't work out, flip them off, adjust, and flip them back on again.
> Now, again, the core design issue, IMHO, is that the switch from
> default-allow to default-deny should be explicit and unmistakable, so
> the rest of this is just tinkering around the edges. But we might as
> well make those edges as nice as possible, and the usability of this
> approach feels good to me.

Fair enough.

Thanks!

Stephen

In response to

Browse pgsql-hackers by date

  From Date Subject
Next Message Peter Geoghegan 2014-09-11 20:47:43 Re: Stating the significance of Lehman & Yao in the nbtree README
Previous Message Robert Haas 2014-09-11 20:22:20 Re: RLS Design