On Sat, Oct 08, 2011 at 09:11:08AM +0200, Kohei KaiGai wrote:
> 2011/10/8 Noah Misch <n...@leadboat.com>:
> > On Sun, Oct 02, 2011 at 07:16:33PM +0200, Kohei KaiGai wrote:
> >> My preference is still also WITH(security_barrier=...) syntax.
> >>
> >> The arguable point was the behavior when a view is replaced without
> >> explicit WITH clause;
> >> whether we should consider it was specified a default value, or we
> >> should consider it means
> >> the option is preserved.
> >> If we stand on the viewpoint that object's attribute related to
> >> security (such as ownership,
> >> acl, label, ...) should be preserved, the security barrier also shall
> >> be preserved.
> >> On the other hand, we can never know what options will be added in the
> >> future, right now.
> >> Thus, we may need to sort out options related to security and not at
> >> DefineVirtualRelation().
> >>
> >> However, do we need to limit type of the options to be preserved to
> >> security related?
> >> It is the first case that object with arbitrary options can be replaced.
> >> It seems to me we have no matter, even if we determine object's
> >> options are preserved
> >> unless an explicit new value is provided.
> >
> > Currently, you can predict how CREATE OR REPLACE affects a given object
> > characteristic with a simple rule: if the CREATE OR REPLACE statement can
> > specify a characteristic, we don't preserve its existing value. ?Otherwise, 
> > we
> > do preserve it. ?Let's not depart from that rule.
> >
> > Applying that rule to the proposed syntax, it shall not preserve the 
> > existing
> > security_barrier value. ?I think that is acceptable. ?If it's not 
> > acceptable, we
> > need a different syntax -- perhaps CREATE SECURITY VIEW.
> >
> No. It also preserves the security-barrier flag, when we replace a view 
> without
> SECURITY option. The only difference is that we have no way to turn off
> security-barrier flag explicitly, right now.
> 
> The major reason why I prefer reloptions rather than "SECURITY" option is
> that allows to reuse the existing capability to store a property of relation.
> It seems to me both of syntax enables to achieve the rule to preserve flags
> when a view is replaced.

Yes, there are no technical barriers to implementing either behavior with either
syntax.  However, CREATE OR REPLACE VIEW ... WITH (...) has a precedent guiding
its behavior: if a CREATE OR REPLACE statement can specify a characteristic, we
don't preserve its existing value.

> >> Any other ideas?
> >
> > Suppose we permitted pushdown of unsafe predicates when the user can read 
> > the
> > involved columns anyway, a generalization of the idea from the first 
> > paragraph
> > of [1]. ?Would that, along with LEAKPROOF, provide enough strategies for 
> > shoring
> > up performance to justify removing unsafe views entirely?
> >
> The problem was that we do all the access control decision at the
> executor stage,
> but planner has to make a plan prior to execution. So, it was also reason why 
> we
> have tried to add LEAKPROOF flag to functions.

Yes; we'd need to invalidate relevant plans in response to anything that changes
access control decisions.  GRANT and ALTER ... OWNER TO already do that, but
we'd need to cover pg_authid/pg_auth_members changes, SET ROLE, SET SESSION
AUTHORIZATION, and probably a few other things.  That might be a substantial
project in its own right.

-- 
Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-hackers

Reply via email to