Beberapa waktu lalu saya membuat pengguna PostgreSQL bernama user1 (PostgreSQL 9.4.9).
Saya ingin menjatuhkan pengguna ini. Jadi saya pertama-tama mencabut semua izin pada tabel, urutan, fungsi, hak istimewa default, dan kepemilikan juga:
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;
Namun tampaknya satu objek tetap tertaut ke pengguna ini dalam 2 basis data:
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
Bahkan tampaknya menjadi fungsi:
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
Tapi saya tidak bisa menentukan objek mana yang dimiliki atau terkait dengan user1.
Jika saya pg_dump -s db1 | grep user1
tidak mendapat hasil! Mungkinkah itu menjadi objek global?
Bagaimana saya bisa mengidentifikasi objek yang hilang?
Saya telah menjalankan perintah di setiap basis data (db1 dan db2). Saya tidak ingin menjatuhkan objek yang dimiliki oleh user1
, hanya ingin menetapkan kembali atau menghapus hibah untuk pengguna ini.
sumber
Anda harus terlebih dahulu terhubung ke database. Dalam contoh Anda itu akan menjadi
dan
Kemudian coba jalankan REVOKE SEMUA HAK ISTIMEWA dan REASSIGN OWNED / DROP pernyataan MILIK lagi.
sumber