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 testuser
dio 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 testuser
hizo 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 GROUP
fuente
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
dropuser
disponible 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