On Fri, Sep 2, 2022 at 3:20 AM Wolfgang Walther <walt...@technowledgy.de> wrote: > The full syntax could look like this: > > GRANT { INHERIT | SET | ALL [ PRIVILEGES ] } > ON ROLE role_name [, ...] > TO role_specification [, ...] WITH GRANT OPTION > [ GRANTED BY role_specification ] > > With this new syntax, the existing > > GRANT role_name TO role_specification [WITH ADMIN OPTION]; > > would be the same as > > GRANT ALL ON role_name TO role_specification [WITH GRANT OPTION];
This would be a pretty significant rework. Right now, there's only one ADMIN OPTION on a role, and you either have it or you don't. Changing things around so that you can have each individual privilege with or without grant option would be a fair amount of work. I don't think it's completely crazy, but I'm not very sold on the idea, either, because giving somebody *either* the ability to grant INHERIT option *or* the ability to grant SET option is largely equivalent from a security point of view. Either way, the grantees will be able to access the privileges of the role in some fashion. This is different from table privileges, where SELECT and INSERT are clearly distinct rights that do not overlap, and thus separating the ability to administer one of those things from the ability to administer the other one has more utility. The situation might look different in the future if we added more role options and if each of those were clearly severable rights. For instance, if we had a DROP option on a role grant that conferred the right to drop the role, that would be distinct from SET and INHERIT and it might make sense to allow someone to administer SET and/or INHERIT but not DROP. However, I don't have any current plans to add such an option, and TBH I find it a little hard to come up with a compelling list of things that would be worth adding as separate permissions here. There are a bunch of things that one role can do to another using ALTER ROLE, and right now you have to be SUPERUSER or have CREATEROLE to do that stuff. In theory, you could turn that into a big list of individual rights so that you can e.g. GRANT CHANGE PASSWORD ON role1 TO role2 WITH GRANT OPTION. However, I really don't see a lot of utility in slicing things up at that level of granularity. There isn't in my view a lot of use case for giving a user the right to change some other user's password but not giving them the right to set the connection limit for that same other user -- and there's even less use case for giving some user the ability to grant one of those rights but not the other. -- Robert Haas EDB: http://www.enterprisedb.com