Re: replacing role-level NOINHERIT with a grant-level option
| От | Robert Haas |
|---|---|
| Тема | Re: replacing role-level NOINHERIT with a grant-level option |
| Дата | |
| Msg-id | CA+TgmoZSU1h6hU4u_T_fMbefEaKWyaWjreubuyGeR057dPnLkg@mail.gmail.com обсуждение исходный текст |
| Ответ на | Re: replacing role-level NOINHERIT with a grant-level option (Robert Haas <robertmhaas@gmail.com>) |
| Ответы |
Re: replacing role-level NOINHERIT with a grant-level option
Re: replacing role-level NOINHERIT with a grant-level option |
| Список | pgsql-hackers |
On Mon, Aug 29, 2022 at 10:17 AM Robert Haas <robertmhaas@gmail.com> wrote: > Good catch. Thanks for the review. Committed with that correction. Argh, I found a bug, and one that I should have caught during testing, too. I modelled the new function select_best_grantor() on is_admin_of_role(), but it differs in that it calls roles_is_member_of() with ROLERECURSE_PRIVS rather than ROLECURSE_MEMBERS. Sadly, roles_is_member_of() handles ROLERECURSE_PRIVS by completely ignoring non-inherited grants, which is wrong, because then calls to select_best_grantor() treat a member of a role with INHERIT FALSE, ADMIN TRUE is if they were not an admin at all, which is incorrect. Here is a patch to rearrange the logic slightly and also add a test case memorializing the intended behavior. Without this change, the regression test included in the patch fails like this: ERROR: no possible grantors ...which is never supposed to happen. -- Robert Haas EDB: http://www.enterprisedb.com
Вложения
В списке pgsql-hackers по дате отправления: