ฉันกำลังดูinformation_schema.role_table_grants
เมื่อฉันเห็นpublic
ในgrantee
คอลัมน์จากนั้นฉันได้ตรวจสอบที่information_schema.enabled_roles
แต่role_name
ไม่มีอยู่
=> ใครหรืออะไรคือpublic
บทบาท
ฉันกำลังดูinformation_schema.role_table_grants
เมื่อฉันเห็นpublic
ในgrantee
คอลัมน์จากนั้นฉันได้ตรวจสอบที่information_schema.enabled_roles
แต่role_name
ไม่มีอยู่
=> ใครหรืออะไรคือpublic
บทบาท
คำตอบ:
คำสำคัญสาธารณะหมายถึงสิทธิ์ที่จะมอบให้กับบทบาททั้งหมดรวมถึงสิทธิ์ที่อาจสร้างขึ้นในภายหลัง PUBLIC อาจถูกมองว่าเป็นกลุ่มที่นิยามโดยนัยซึ่งรวมถึงบทบาททั้งหมดเสมอ บทบาทเฉพาะใด ๆ จะมีผลรวมของสิทธิพิเศษที่มอบให้โดยตรงสิทธิพิเศษที่มอบให้กับบทบาทใดก็ตามที่สมาชิกปัจจุบันและสิทธิประโยชน์ที่มอบให้แก่สาธารณะ
ในขณะนี้เป็นจริงมันไม่ได้เป็นภาพเต็ม สาธารณะยังทำหน้าที่เป็นบทบาทโดยนัยที่บทบาทอื่นเป็นของและที่มีสิทธิ์ของตนเองไม่ได้สะท้อนและรายงานที่ได้รับสืบทอดมาเสมอ
โดยค่าเริ่มต้นจะให้สิทธิ์ในการสร้างสคีมาสาธารณะ เมื่อคุณไม่ลบขั้นตอนที่ถูกต้องอื่น ๆ ทั้งหมดนี้เพื่อสร้างผลลัพธ์ผู้ใช้แบบอ่านอย่างเดียวในผู้ใช้นั้นยังสามารถสร้างวัตถุใหม่ในสคีมาสาธารณะและจากนั้นเนื่องจากความเป็นเจ้าของใส่ข้อมูลไว้ในพวกเขา เพื่อป้องกันสิ่งนี้
REVOKE ALL ON SCHEMA public FROM PUBLIC;
ในทำนองเดียวกันก็ให้สิทธิ์ในระดับฐานข้อมูลเพื่อลบการใช้งาน
REVOKE ALL ON DATABASE all_database FROM PUBLIC;
บทความดีดีที่นี่: https://wiki.postgresql.org/images/d/d1/Managing_rights_in_postgresql.pdf