Jakiś czas temu stworzyłem użytkownika PostgreSQL o nazwie user1 (PostgreSQL 9.4.9).
Chcę upuścić tego użytkownika. Dlatego najpierw cofam wszystkie uprawnienia dotyczące tabel, sekwencji, funkcji, domyślnych uprawnień i własności:
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;
Wydaje się jednak, że jeden obiekt pozostaje powiązany z tym użytkownikiem w 2 bazach danych:
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
Wydaje się nawet, że jest to funkcja:
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
Ale nie mogę ustalić, który obiekt jest własnością użytkownika lub jest powiązany z użytkownikiem 1.
Jeśli nie pg_dump -s db1 | grep user1
dostanę rezultatu! Czy może to być obiekt globalny?
Jak mogę zidentyfikować brakujący obiekt?
Wykonałem polecenia w każdej bazie danych (db1 i db2). Nie chcę upuszczać obiektów należących do user1
, chcę tylko ponownie przypisać lub usunąć granty dla tego użytkownika.