บางครั้งฉันสร้างผู้ใช้ 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;
อย่างไรก็ตามดูเหมือนว่าวัตถุหนึ่งยังคงเชื่อมโยงกับผู้ใช้นี้ใน 2 ฐานข้อมูล:
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
แต่ฉันไม่สามารถระบุได้ว่าวัตถุใดเป็นเจ้าของหรือเกี่ยวข้องกับ user1
ถ้าฉันpg_dump -s db1 | grep user1
ไม่ได้รับผลลัพธ์! มันอาจเป็นวัตถุระดับโลกหรือไม่
ฉันจะระบุวัตถุที่หายไปได้อย่างไร
ฉันรันคำสั่งในแต่ละฐานข้อมูล (db1 และ db2) ฉันไม่ต้องการวางวัตถุที่เป็นของuser1
เพียงต้องการกำหนดใหม่หรือลบการให้สิทธิ์สำหรับผู้ใช้รายนี้