Qué tal si
DROP USER <username>
Este es en realidad un alias de DROP ROLE.
Debe eliminar explícitamente cualquier privilegio asociado con ese usuario, también para mover su propiedad a otros roles (o eliminar el objeto).
Esto se logra mejor
REASSIGN OWNED BY <olduser> TO <newuser>
y
DROP OWNED BY <olduser>
Este último eliminará cualquier privilegio otorgado al usuario.
Consulte los documentos de postgres para DROP ROLE y la descripción más detallada de esto.
Adición:
Aparentemente, intentar eliminar a un usuario usando los comandos mencionados aquí solo funcionará si los está ejecutando mientras está conectado a la misma base de datos de la que se hicieron los GRANTS originales, como se explica aquí:
https://www.postgresql.org/message-id/83894A1821034948BA27FE4DAA47427928F7C29922%40apde03.APD.Satcom.Local
CREATE TABLE foo(bar SERIAL); ALTER TABLE foo OWNER TO postgres; CREATE USER testuser; GRANT ALL ON foo TO testuser; DROP USER testuserdio a los mensajes de error:ERROR: role "testuser" cannot be dropped because some objects depend on it DETAIL: access to table foo. Sin embargo,DROP OWNED BY testuserhizo el truco, aparentemente Postgres considera que las subvenciones son objetos soltables.La respuesta aceptada resultó en errores para mí al intentar REASIGNAR PROPIEDAD DE o DROP OWNED BY. Lo siguiente funcionó para mí:
El usuario puede tener privilegios en otros esquemas, en cuyo caso tendrá que ejecutar la línea REVOKE apropiada con "público" reemplazado por el esquema correcto. Para mostrar todos los esquemas y tipos de privilegios de un usuario, edité el comando \ dp para realizar esta consulta:
No estoy seguro de qué tipos de privilegios corresponden a la revocación en TABLAS, SECUENCIAS o FUNCIONES, pero creo que todos caen bajo uno de los tres.
fuente
REVOKE ALL PRIVILEGES ON DATABASE db_name FROM username;revoke USAGE on SCHEMA some_schema from username;También tenga en cuenta, si ha concedido explícitamente:
CONNECT ON DATABASE xxx TO GROUP,deberá revocar esto por separado de DROP OWNED BY, usando:
REVOKE CONNECT ON DATABASE xxx FROM GROUPfuente
Tuve que agregar una línea más para REVOKE ...
Despues de correr:
Todavía recibía el error: el nombre de usuario no se puede eliminar porque algunos objetos dependen de él DETALLE: privilegios para el esquema público
Me estaba perdiendo esto:
Entonces pude dejar el papel.
fuente
Esto es lo que finalmente funcionó para mí:
fuente
No hay
REVOKE ALL PRIVILEGES ON ALL VIEWS, así que terminé con:y habitual:
para que lo siguiente tenga éxito:
fuente
En la línea de comandos, hay un comando
dropuserdisponible para eliminar al usuario de postgres.fuente
Enfrenté el mismo problema y ahora encontré una manera de resolverlo. Primero debe eliminar la base de datos del usuario que desea eliminar. Entonces, el usuario puede eliminarse fácilmente.
Creé un usuario llamado "msf" y luché un tiempo para eliminar al usuario y recrearlo. Seguí los pasos a continuación y lo logré.
1) Suelta la base de datos
2) soltar al usuario
Ahora conseguí eliminar al usuario con éxito.
fuente