Cách đây một vài lần, tôi đã tạo một người dùng PostgreSQL có tên user1 (PostgreQuery 9.4.9).
Tôi muốn bỏ người dùng này. Vì vậy, trước tiên tôi thu hồi tất cả các quyền trên bảng, trình tự, hàm, đặc quyền mặc định và quyền sở hữu:
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;
Tuy nhiên, dường như một đối tượng vẫn được liên kết với người dùng này trong 2 cơ sở dữ liệu:
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
Nó thậm chí có vẻ là một chức năng:
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
Nhưng tôi không thể xác định đối tượng nào được sở hữu hoặc liên quan đến user1.
Nếu tôi pg_dump -s db1 | grep user1
không nhận được kết quả! Nó có thể là một đối tượng toàn cầu?
Làm thế nào tôi có thể xác định các đối tượng mất tích?
Tôi đã thực hiện các lệnh trong mỗi cơ sở dữ liệu (db1 và db2). Tôi không muốn bỏ các đối tượng thuộc sở hữu của user1
, chỉ muốn gán lại hoặc xóa trợ cấp cho người dùng này.