On Mon, Jun 23, 2014 at 2:29 PM, Stephen Frost <sfr...@snowman.net> wrote: > What are these policies going to depend on? Will they be allowed to > overlap? I don't see multi-policy support as being very easily added.
We discussed the point about overlap upthread, and I gave specific examples. If there's something else you want me to provide here, please be more clear about it. > If there are specific ways to design the syntax which would make it > easier to support multiple policies in the future, I'm all for it. Have > any specific thoughts regarding that? I did propose something already upthread, and then Dean said this: # Note that the syntax proposed elsewhere --- GRANT SELECT (polname) ON # TABLE tab TO role --- doesn't work because it conflicts with the # syntax for granting column privileges, so there needs to be a distinct # syntax for this, and I think it ought to ultimately allow things like # # GRANT SELECT (col1, col2), UPDATE (col1) ON t1 TO bob USING policy1; He's got a good point there. I don't know whether the policy should be given inline (e.g. GRANT ... WHERE stuff()) or out-of-line (GRANT ... USING policy1) but it seems like specifying it as some sort of GRANT modifier might make sense. I'm sure there are other ways also, of course. >> >> - Require the user to specify in some way which of the available >> >> policies they want applied, and then apply only that one. >> > >> > I'd want to at least see a way to apply an ordering to the policies >> > being applied, or have PG work out which one is "cheapest" and try that >> > one first. >> >> Cost-based comparison of policies that return different results >> doesn't seem sensible to me. > > I keep coming back to the thought that, really, having multiple > overlapping policies just adds unnecessary complication to the system > for not much gain in real functionality. Being able to specify a policy > per-role might be useful, but that's only one dimension and I can > imagine a lot of other dimensions that one might want to use to control > which policy is used. Well, I don't agree, and I've given examples upthread showing the kinds of scenarios that I'm concerned about, which are drawn from real experiences I've had. It may be that I'm the only one who has had such experiences, of course; or that there aren't enough people who have to justify catering to such use cases. But I'm not sure there's much point in trying to have a conversation about how such a thing could be made to work if you're just going to revert back to "well, we don't really need this anyway" each time I make or refute a technical point. >> I think it would be a VERY bad idea to design the system around the >> assumption that the RLS quals will be much more or less selective than >> the user-supplied quals. That's going to be different in different >> environments. > > Fine- but do you really see the query planner having a problem pushing > down whichever is the more selective qual, if the user-provided qual is > marked as leakproof? I'm not quite sure I understand the scenario you're describing here. Can you provide a tangible example? I expect that most of the things the RLS-limited user might write in the WHERE clause will NOT get pushed down because most functions are not leakproof. However, the issue I'm actually concerned about is whether the *security* qual is simple enough to permit an index-scan. Anything with an OR clause in it probably won't be, and any function call definitely won't be. > I realize that you want multiple policies because you'd like a way for > the RLS qual to be made simpler for certain cases while also having more > complex quals for other cases. What I keep waiting to hear is exactly > how you want to specify which policy is used because that's where it > gets ugly and complicated. I still really don't like the idea of trying > to apply multiple policies inside of a single query execution. See above comments. -- Robert Haas EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company -- Sent via pgsql-hackers mailing list (email@example.com) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers