Re: CREATE ROLE IF NOT EXISTS

From: David Christensen <david(dot)christensen(at)crunchydata(dot)com>
To: Mark Dilger <mark(dot)dilger(at)enterprisedb(dot)com>
Cc: Stephen Frost <sfrost(at)snowman(dot)net>, Daniel Gustafsson <daniel(at)yesql(dot)se>, Tom Lane <tgl(at)sss(dot)pgh(dot)pa(dot)us>, PostgreSQL-development <pgsql-hackers(at)postgresql(dot)org>
Subject: Re: CREATE ROLE IF NOT EXISTS
Date: 2021-11-09 16:19:09
Message-ID: CAOxo6XK=j60Z6bfTMZ93pXpKM2Hw7_x5=kH2fncjYkEkA2svyQ@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-hackers

On Tue, Nov 9, 2021 at 9:55 AM Mark Dilger <mark(dot)dilger(at)enterprisedb(dot)com>
wrote:

> > On Nov 9, 2021, at 7:36 AM, David Christensen <
> david(dot)christensen(at)crunchydata(dot)com> wrote:
> >
> > If CINE semantics are at issue, what about the CREATE OR REPLACE
> semantics with some sort of merge into the existing role? I don't care
> strongly about which approach is taken, just think the overall "make this
> role exist in this form" without an error is useful in my own work, and
> CINE was easier to implement as a first pass.
>
> CREATE OR REPLACE might be a better option, not with the "merge into the
> existing role" part, but rather as drop+create. If a malicious actor has
> already added other roles to the role, or created a table with a malicious
> trigger definition, the drop part will fail, which is good from a security
> viewpoint. Of course, the drop portion will also fail under other
> conditions which don't entail any security concerns, but maybe they could
> be addressed in a series of follow-on patches?
>
> I understand this idea is not as useful for creating idempotent scripts,
> but maybe it gets you part of the way there?

Well, the CREATE OR REPLACE via just setting the role's attributes
explicitly based on what you passed it could work (not strictly DROP +
CREATE, in that you're keeping existing ownerships, etc, and can avoid
cross-db permissions/ownership checks). Seems like some sort of merge
logic could be in order, as you wouldn't really want to lose existing
permissions granted to a role, but you want to ensure that /at least/ the
permissions granted exist for this role.

David

In response to

Responses

Browse pgsql-hackers by date

  From Date Subject
Next Message Stephen Frost 2021-11-09 16:22:45 Re: CREATE ROLE IF NOT EXISTS
Previous Message vignesh C 2021-11-09 16:18:30 Removed unused import modules from tap tests