Hace algunas veces creé un usuario de PostgreSQL llamado user1 (PostgreSQL 9.4.9).
Quiero dejar caer este usuario. Así que primero revoco todos los permisos en tablas, secuencias, funciones, privilegios predeterminados y propiedad también:
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON SEQUENCES FROM user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON TABLES FROM user1;
ALTER DEFAULT PRIVILEGES IN SCHEMA public REVOKE ALL ON FUNCTIONS FROM user1;
REVOKE ALL ON ALL SEQUENCES IN SCHEMA public FROM user1;
REVOKE ALL ON ALL TABLES IN SCHEMA public FROM user1;
REVOKE ALL ON ALL FUNCTIONS IN SCHEMA public FROM user1;
REASSIGN OWNED BY user1 TO postgres;
Sin embargo, parece que un objeto permanece vinculado a este usuario en 2 bases de datos:
postgres=# DROP ROLE user1;
ERROR: role "user1" cannot be dropped because some objects depend on it
DETAIL: 1 object in database db1
1 object in database db2
Incluso parece ser una función:
postgres=# \c db1
You are now connected to database "db1" as user "postgres".
db1=# DROP ROLE user1;
ERROR: role "user1" cannot be dropped because some objects depend on it
DETAIL: privileges for function text(boolean)
1 object in database db2
Pero no puedo determinar qué objeto pertenece o está relacionado con el usuario1.
Si no pg_dump -s db1 | grep user1
obtengo ningún resultado! ¿Podría ser un objeto global?
¿Cómo puedo identificar el objeto perdido?
He ejecutado los comandos en cada base de datos (db1 y db2). No quiero dejar caer los objetos de su propiedad user1
, solo quiero reasignar o eliminar concesiones para este usuario.
fuente
Primero debe conectarse a la base de datos. En tu caso eso sería
y
Luego, intente ejecutar las declaraciones REVOKE ALL PRIVILEGES y REASSIGN OWNED / DROP DWNP nuevamente.
fuente