Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u1tFc-009vAY-F3 for pgsql-sql@arkaria.postgresql.org; Mon, 07 Apr 2025 20:39:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1u1tFa-003l7a-BC for pgsql-sql@arkaria.postgresql.org; Mon, 07 Apr 2025 20:39:22 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1u1nRz-00HCJ0-2l for pgsql-sql@lists.postgresql.org; Mon, 07 Apr 2025 14:27:47 +0000 Received: from qs51p00im-qukt01072502.me.com ([17.57.155.15]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1u1nRx-003UGM-0m for pgsql-sql@lists.postgresql.org; Mon, 07 Apr 2025 14:27:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=icloud.com; s=1a1hai; bh=bwyswFI/zhE7AS1Y+qoR9Xq3jDpP43IO0eJuWvua90Q=; h=To:From:Subject:Date:Message-id:Content-Type:MIME-Version:x-icloud-hme; b=o2pem6ejD7gQUGXjoG3Wvk3FGOchyzFoxl+3+dleLHojwDM12Nzw52QoQn2It/sM/ vYOfF2sR0GbxydNFrI+M4mO0KnI7Fqe/hQS2aaAa1i9qe0QXj2D7XyjtCciZJfrM/f B6Qfrmqgd4fcQAVGNv16gh8FUlhN8oHTQJ2sisdk5+e/ZkaaqsjQEv8djtdRbyaicz N1jDnj/mY/FkFFRKv0fe1TiNz935LIpkdzQnZ2zoRaqllicOErcfC2XUoNCsYVSJg1 mbkLscJlBjHnsku2ngZYFNhvg1j+jdyYW2skNXxgJspcKt8yE9cV4cy4m/w6YHKItI 8u9PiwK7evKeA== Received: from qs51p00im-qukt01072502.me.com (unknown [17.57.155.15]) by qs51p00im-qukt01072502.me.com (Postfix) with ESMTPS id 761156EC0489; Mon, 7 Apr 2025 14:27:42 +0000 (UTC) Received: from p00-mailws2-64655bbcdf-95ft8 (qs51p00im.dlb-asmtpoutvip.me.com [10.112.113.12]) by qs51p00im-qukt01072502.me.com (Postfix) with ESMTPSA id B5BEB6EC03EE; Mon, 7 Apr 2025 14:27:41 +0000 (UTC) To: "David G. Johnston" Cc: "pgsql-sql@lists.postgresql.org" From: "Ing. Marijo Kristo" Subject: =?utf-8?B?QXc6wqAgUmU6IFJlOiBSZXZva2UgQ29ubmVjdCBQcml2aWxlZ2UgZnJvbSBE?= =?utf-8?B?YXRhYmFzZSBub3Qgd29ya2luZw==?= Date: Mon, 7 Apr 2025 14:27:41 +0000 (UTC) X-Mailer: iCloud MailClientcurrent MailServer2502B13.7c5914c7dad3 Message-id: Content-Type: multipart/alternative; boundary=Apple-Webmail-42--95a78445-f8aa-4876-ac83-2204c5899f7b MIME-Version: 1.0 In-Reply-To: References: X-Proofpoint-GUID: eGOe5u2jbdMgZzPpNsitnrcl87hknF-n X-Proofpoint-ORIG-GUID: eGOe5u2jbdMgZzPpNsitnrcl87hknF-n X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1095,Hydra:6.0.680,FMLib:17.12.68.34 definitions=2025-04-07_04,2025-04-03_03,2024-11-22_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 clxscore=1015 malwarescore=0 adultscore=0 suspectscore=0 mlxlogscore=999 bulkscore=0 phishscore=0 spamscore=0 mlxscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.19.0-2308100000 definitions=main-2504070102 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --Apple-Webmail-42--95a78445-f8aa-4876-ac83-2204c5899f7b Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=utf-8; format=flowed Hi, here is a full reproducer. Also revoking with the granted by clause do= es not work. #clean initialization postgres=3D# create database testdb own= er postgres; CREATE DATABASE postgres=3D# create user test_admin createrol= e; CREATE ROLE postgres=3D# alter user test_admin with password 'test1234'= ; ALTER ROLE postgres=3D# grant connect on database testdb to test_admin w= ith grant option; GRANT #create user and grant connect privilege with test= _admin postgres=3D# set role test_admin; SET postgres=3D> create user test= _user password 'testuserpw'; CREATE ROLE postgres=3D> grant connect on dat= abase testdb to test_user; GRANT #generate the failure by granting test_ad= min superuser privileges postgres=3D> reset role; RESET postgres=3D# alter= user test_admin superuser; ALTER ROLE postgres=3D# set role test_admin; S= ET postgres=3D# revoke connect on database testdb from test_user; REVOKE p= ostgres=3D# drop user test_user; ERROR: role "test_user" cannot be dropped= because some objects depend on it DETAIL: privileges for database testdb = #test also with "granted by clause" postgres=3D# revoke connect on databas= e testdb from test_user granted by "test_admin"; REVOKE postgres=3D# drop = user test_user; ERROR: role "test_user" cannot be dropped because some obj= ects depend on it DETAIL: privileges for database testdb #fix by removing = superuser privilege from test_admin postgres=3D# reset role; RESET postgre= s=3D# alter user test_admin nosuperuser; ALTER ROLE postgres=3D# set role = test_admin; SET postgres=3D> revoke connect on database testdb from test_u= ser; REVOKE postgres=3D> drop role test_user; DROP ROLE Best Regards Marij= o Kristo David G. Johnston schrieb am 7. Apr.= 2025 um 15:42: On Monday, April 7, 2025, Ing. Marijo Kristo < marijo.kris= to@icloud.com > wrote: Seems like a bug to me. Can someone else verifiy th= is ? It would help greatly if you create a reproducer that starts from a c= lean install, creates the roles and database, and demonstrates the issue. = postgres=3D# \du vault_admin; List of roles Role name | Attributes -------= ------+---------------- -------- vault_admin | Superuser, Create role post= gres=3D# set role vault_admin; You are setting role to another role that h= as superuser which is basically pointless. Use =E2=80=9Cgranted by=E2=80=9D= in your revoke command. If that works this isn=E2=80=99t a bug. David J. --Apple-Webmail-42--95a78445-f8aa-4876-ac83-2204c5899f7b Content-Type: multipart/related; type="text/html"; boundary=Apple-Webmail-86--95a78445-f8aa-4876-ac83-2204c5899f7b --Apple-Webmail-86--95a78445-f8aa-4876-ac83-2204c5899f7b Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8;
Hi,
here is a full reproducer. Also revoking with the granted= by clause does not work.

#clean initialization
postgres=3D# create database testdb owner postgres;
<= div>CREATE DATABASE
postgres=3D# create user test_admin crea= terole;
CREATE ROLE
postgres=3D# alter user te= st_admin with password 'test1234';
ALTER ROLE
= postgres=3D# grant connect on database testdb to test_admin with grant opt= ion;
GRANT

#create user and gra= nt connect privilege with test_admin
postgres=3D# set role t= est_admin;
SET
postgres=3D> create user tes= t_user password 'testuserpw';
CREATE ROLE
post= gres=3D> grant connect on database testdb to test_user;
G= RANT

#generate the failure by granting test_a= dmin superuser privileges
postgres=3D> reset role;
RESET
postgres=3D# alter user test_admin superuser;<= br>
ALTER ROLE
postgres=3D# set role test_admin;
SET
postgres=3D# revoke connect on database tes= tdb from test_user;
REVOKE
postgres=3D# drop u= ser test_user;
ERROR:  role "test_user" cannot be dropp= ed because some objects depend on it
DETAIL:  privilege= s for database testdb

#test also with "grante= d by clause"
postgres=3D# revoke connect on database testdb = from test_user granted by "test_admin";
REVOKE
postgres=3D# drop user test_user;
ERROR:  role "test_u= ser" cannot be dropped because some objects depend on it
DET= AIL:  privileges for database testdb

#fi= x by removing superuser privilege from test_admin
postgres=3D= # reset role;
RESET
postgres=3D# alter user te= st_admin nosuperuser;
ALTER ROLE
postgres=3D# = set role test_admin;
SET
postgres=3D> revok= e connect on database testdb from test_user;
REVOKE
postgres=3D> drop role test_user;
DROP ROLE

Best Regards
Marijo Kristo
<= div>
David G. Johnston <david.g= .johnston@gmail.com> schrieb am 7. Apr. 2025 um 15:42:

On Monday, April 7, 2025, Ing. Marijo Kri= sto <marijo.kristo@icloud.c= om> wrote:

<= /div>
Seems like a bug to me.
Can someone els= e verifiy this ?

It would = help greatly if you create a reproducer that starts from a clean install, = creates the roles and database, and demonstrates the issue.
=

postgres=3D# \du vault_admin;
    &nb= sp;       List of roles
 = Role name  |       Attributes
-------------+------------------------
vaul= t_admin | Superuser, Create role

postgres=3D#= set role vault_admin;

You are setting role to another role that has superuser which is basica= lly pointless.

Use =E2=80=9Cgranted by=E2=80=9D= in your revoke command.  If that works this isn=E2=80=99t a bug.
=

David J.


--Apple-Webmail-86--95a78445-f8aa-4876-ac83-2204c5899f7b-- --Apple-Webmail-42--95a78445-f8aa-4876-ac83-2204c5899f7b--