psql 9.6.3 on OS X. I'm dealing with a production database in which all db access has been made by the same user - the db owner, which isn't actually a superuser because the db runs on amazon RDS - amazon retains the superuser privilege for its own users and makes non-superuser role with createrole and createdb privileges for use as the primary role by the AWS account.
I am now tasked with securing the db, which means I want to create a role with reduced permissions that I can transfer ownership to, and then a bunch of roles for various types of access - developer ad-hoc access, application-specific roles, etc. My first task was to simply create a role without createdb and createrole privilege which can be the owner of everything. The original role was called 'stemadmin' and I have created a role called 'stem' stem_local=> \du List of roles Role name | Attributes | Member of -------------+---------------------------------------------- --------------+------------------ sgendler | Superuser, Create role, Create DB, Replication, Bypass RLS | {} stem | No inheritance, Create role | {} stemadmin | No inheritance, Create role, Create DB | {stem} stemdropper | No inheritance, Create role, Create DB | {stemadmin,stem} I have a superuser called sgendler, but I cannot use it, because I do not have superuser access in my production environment (RDS). Every object in the database is owned by stemadmin. If I login to the database as stemadmin and attempt to execute 'REASSIGN OWNED BY stemadmin TO stem;' I receive the following requiring superuser or not being able to be the owning role directly when reassigning. This seems like a documentation oversight. stem_local=> reassign owned by stemadmin to stem; ERROR: permission denied to reassign objects So it won't allow me to give away my own permissions. Obviously, I can't execute that statement as 'stem' since that would be stealing permissions. So my only remaining option was to create the 'stemdropper' role, which is a member of both 'stemadmin' and 'stem' so it should have permissions on objects owned by both stem and stemadmin. Yet when I run the same statement as 'stemdropper' I still get the permission denied message. So how am I supposed to reassign anything if I cannot become superuser? Do I really have to dump the entire db without ownership info, then reimport it into a new db as the new owner? That seems like a ridiculously slow and ineffective way to accomplish that. And the error message is tremendously unhelpful, all things considered. It should be noted that if I alter all 3 roles with 'inherit' it still doesn't work. It would appear that the only way to 'reassign owned' is as a superuser (which is contradicted by the documentation), which isn't accessible in RDS. Meanwhile, the documentation merely says something about needing to have permissions to access both roles in a reassign command, but says nothing about And while I have you, the 'new' page for subscribing to mailing lists just throws an error. It took me way too long to become a member of this list because the instructions specifically sent me to an ineffective method. Not exactly new-user friendly. I've been using postgresql for more than a decade and have been a member of various lists for that long, but not this one. Were I new to the postgresql ecosystem, I'd have probably quit in frustration when I couldn't log in after creating an account just to get on a mailing list so I can send an email.