Thread: BUG #1114: REVOKE done by non-privileged user claims success

BUG #1114: REVOKE done by non-privileged user claims success

From
"PostgreSQL Bugs List"
Date:
The following bug has been logged online:

Bug reference:      1114
Logged by:          Oliver Elphick

Email address:      olly@lfix.co.uk

PostgreSQL version: 7.4

Operating system:   Debian Linux

Description:        REVOKE done by non-privileged user claims success

Details:

When REVOKE is used on an object for which the current user does not have
GRANT privilege, the operation fails but "REVOKE" is returned as if it had
succeeded:

  $ psql -U fred template1
  template1=> revoke create on schema public from public;
  REVOKE

(NB: this web interface at http://www.postgresql.org/bugform.html could do
with Pg version options for 7.3.6, 7.4.1 and 7.4.2).

Re: BUG #1114: REVOKE done by non-privileged user claims success

From
Tom Lane
Date:
"PostgreSQL Bugs List" <pgsql-bugs@postgresql.org> writes:
> When REVOKE is used on an object for which the current user does not have
> GRANT privilege, the operation fails but "REVOKE" is returned as if it had
> succeeded:

Looking at the code, this seems to be intentional, because the privilege
check is not made for revokes only for grants:

        if (stmt->is_grant
            && !pg_class_ownercheck(relOid, GetUserId())
            && pg_class_aclcheck(relOid, GetUserId(),
                                 ACL_GRANT_OPTION_FOR(privileges)) != ACLCHECK_OK)
            aclcheck_error(ACLCHECK_NO_PRIV, ACL_KIND_CLASS, relvar->relname);

Peter, do you remember why you did it that way?

            regards, tom lane

Re: BUG #1114: REVOKE done by non-privileged user claims success

From
Peter Eisentraut
Date:
Tom Lane wrote:
> Looking at the code, this seems to be intentional, because the
> privilege check is not made for revokes only for grants:
> Peter, do you remember why you did it that way?

I'm not really sure right now.  It doesn't really make sense, does it?
Certainly, the SQL standard requires a privilege check on revoke.