Деякий час тому я створив користувача PostgreSQL на ім’я user1 (PostgreSQL 9.4.9).
Я хочу скинути цього користувача. Тому я спочатку відкликаю всі дозволи на таблиці, послідовності, функції, привілеї та права власності за замовчуванням:
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;
Однак здається, що один об’єкт залишається пов'язаним з цим користувачем у двох базах даних:
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
Це навіть здається функцією:
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
Але я не можу визначити, який об’єкт належить або пов’язаний з користувачем1.
Якщо я pg_dump -s db1 | grep user1
не отримаю результату! Чи може це бути глобальним об’єктом?
Як я можу визначити відсутній об’єкт?
Я виконував команди у кожній базі даних (db1 та db2). Я не хочу скидати об’єкти, якими володіє user1
, просто хочу перепризначити або видалити гранти для цього користувача.