Re: [v9.4] row level security
От | Dean Rasheed |
---|---|
Тема | Re: [v9.4] row level security |
Дата | |
Msg-id | CAEZATCXP-ZLtR0S3gMZwGdeYR=VEqoUoVCt9ntvkzdU9zU7RQQ@mail.gmail.com обсуждение исходный текст |
Ответ на | Re: [v9.4] row level security (Craig Ringer <craig@2ndquadrant.com>) |
Ответы |
Re: [v9.4] row level security
|
Список | pgsql-hackers |
On 6 November 2013 06:38, Craig Ringer <craig@2ndquadrant.com> wrote: > On 11/05/2013 09:36 PM, Robert Haas wrote: >> I haven't studied this patch in detail, but I see why there's some >> unhappiness about that code: it's an RLS-specific kluge. Just >> shooting from the hip here, maybe we should attack the problem of >> making security-barrier views updatable first, as a separate patch. > > That's the approach I've been considering. FWIW, I have a half-complete patch to make SB views auto-updatable, borrowing some code from the RLS patch. I hadn't looked at it for some time, but I've just brushed the dust off it and rebased it to head. There are several things I don't like in it, and it's probably not close to being committable, but it might give you some ideas if you were going to take a crack at this yourself. The basic idea is to have rewriteTargetView() collect up any quals from SB views in a new list on the target RTE, instead of adding them to the main query's predicates (it needs to be a list of SB quals, in case there are SB views on top of other SB views, in which case they need to be kept separate from one another). Then at the end of the rewriting process (after any views referenced in the SB quals have been expanded), a new piece of code kicks in to process any RTEs with SB quals, turning them into (possibly nested) subquery RTEs. The complication is that the query's resultRelation RTE mustn't be a subquery. This is handled this in a similar way to the trigger-updatable views code, producing 2 RTEs --- the resultRelation RTE becomes a direct reference to the base relation, and a separate subquery RTE acts as the source of rows to update. An additional complication arising from that approach is that the planner's preptlist code (expand_targetlist) may add additional targetlist entries representing identity assignments, so it needs to know that the source RTE is now different from the result RTE in the query, otherwise it all falls apart because the target RTE isn't in the query's fromList. That's one of the things I don't like about this. In fact it seems messy that there are 2 separate places in the code that expand the targetlist. Anyway, feel free to do what you like with this. I wasn't planning on submitting it to the next commitfest myself, because my non-PG workload is too high, and I don't expect to get much time to hack on postgresql during the next couple of months. Regards, Dean
Вложения
В списке pgsql-hackers по дате отправления: