Postgresql เปิดใช้งานส่วนขยายที่ไม่มีผู้ใช้ขั้นสูง


13

ฉันมีเซิร์ฟเวอร์ PostgreSQL 9.5 ซึ่งฉันมีสคริปต์ที่สร้างบทบาทและฐานข้อมูลสำหรับผู้ใช้โดยอัตโนมัติ ภายในฐานข้อมูลเหล่านี้ก็จะเป็นประโยชน์ในการเปิดใช้ส่วนขยายที่เฉพาะเจาะจง (เช่น pgcrypto) แต่ที่ผมเข้าใจหนึ่งจะต้อง superuser CREATE EXTENSIONการทำงาน มีวิธีการเปิดใช้งานส่วนขยายดังกล่าวโดยไม่ต้องลงชื่อเข้าใช้ด้วยตนเองด้วยบัญชี superuser หรือไม่?


4
คุณลองเพิ่มไปยังtemplate1แล้วสร้างฐานข้อมูลผู้ใช้แต่ละคนจากtemplate1ไลค์CREATE DATABASE foo OWNER=userfoo TEMPLATE=template1ไหม?
Kassandry

1
@ Kassandry ไม่ได้คิดเช่นนั้น แต่เป็นความคิดที่ดี เป็นการดีที่ฉันต้องการให้เจ้าของสามารถเพิ่มส่วนขยายได้หากพวกเขาต้องการ แต่นี่ก็ยังเป็นไปได้ที่ยอมรับได้
beldaz

คำตอบ:


10

จากเอกสารในส่วนขยาย

superuser (บูลีน) หากพารามิเตอร์นี้เป็นจริง (ซึ่งเป็นค่าเริ่มต้น) เฉพาะผู้ใช้ระดับสูงเท่านั้นที่สามารถสร้างส่วนขยายหรืออัปเดตเป็นเวอร์ชันใหม่ได้ หากตั้งค่าเป็นเท็จจำเป็นต้องใช้สิทธิ์พิเศษในการดำเนินการคำสั่งในการติดตั้งหรือสคริปต์การอัพเดท

ค่าไม่ถูกตั้งค่าpgcrypto.controlดังนั้นจึงเป็นค่าเริ่มต้นเป็นจริงซึ่งต้องใช้ SuperUser

ซึ่งหมายความว่าคุณไม่สามารถCREATE EXTENSIONเป็นเจ้าของฐานข้อมูลได้เพียงอย่างเดียวแม้ว่าเอกสารบนCREATE EXTENSION จะทำให้คุณเชื่อ

ฉันพยายามอย่างหนักเพื่อตั้งค่าfalseและไม่มีความสุข C เป็นภาษาที่ไม่น่าเชื่อถือและคุณจะได้รับ

ข้อผิดพลาด: การอนุญาตถูกปฏิเสธสำหรับภาษา c

จากเอกสารใน pg_language

เฉพาะผู้ใช้ระดับสูงเท่านั้นที่สามารถสร้างฟังก์ชั่นในภาษาที่ไม่น่าเชื่อถือ

... แน่นอนคุณสามารถcเชื่อถือได้UPDATE pg_language set lanpltrusted = true where lanname = 'c';ในฐานะผู้ใช้ขั้นสูง จากนั้นCREATE EXTENSION pgcryptoจะทำงานได้ดีในฐานะที่ไม่ใช่ผู้ใช้ superuser แต่ดูเหมือนว่าเป็นความคิดที่ไม่ดีถ้าคุณต้องกังวลเกี่ยวกับผู้ใช้ที่อัปโหลดแหล่งข้อมูลไปยังไดเรกทอรีส่วนขยายแล้วติดตั้งในฐานข้อมูล กล่าวคือฉันจะไม่ไปไกลขนาดนั้น ฉันจะหาวิธีอื่นในการดูแลแมวตัวนี้


ขอบคุณ Evan นั่นเป็นคำตอบที่ละเอียดที่สุดเท่าที่ฉันจะขอได้ ฉันอาจเลือกข้อเสนอที่น่าสนใจของ @ Kassandry เพื่อรับสิ่งนี้ ฉันคิดเกี่ยวกับการตัดส่วนขยาย CREATE ในกระบวนงานที่เก็บไว้ แต่ไม่สามารถหาเส้นทางเพื่อทำให้งานนี้ในฐานข้อมูลเดียวกันโดยไม่ต้องตรวจสอบความถูกต้อง dblink
beldaz

อะไรคือประเด็นที่ไม่มีทางเลือกในpg_dumpการป้องกันไม่ให้งบการทุ่มตลาดเกี่ยวกับส่วนขยาย? ฉันกำลังมีการใช้เครื่องมือประมวลผลข้อความภายนอกที่จะเอางบผู้ที่มาจาก SQL pg_dumpทิ้ง
Claudix

@Evan Carroll: เป็นไปได้ไหมที่จะตั้งค่า superuser เป็น false ผ่าน psql cli? ฉันมีอินสแตนซ์เกี่ยวกับ amazon aws rds และไม่สามารถเข้าถึง pgcrypto.control
ribamar

2
@ribamar ไม่เพราะนั่นหมายความว่าทุกคนที่เชื่อมต่อกับฐานข้อมูลสามารถทำการประมวลผลรหัสตามอำเภอใจตามตัวอักษรในฐานะ db postmaster นั่นจะเป็นความคิดที่น่ากลัว
Evan Carroll

ไม่ใช่ใคร superuser ฉันเข้าใจว่าด้วยวิธีนี้คุณจะสร้างความแตกต่างให้กับระบบปฏิบัติการ super จากผู้ใช้ dbms super แม้ว่าฉันจะทำการตัดสินใจเช่นนั้นฉันก็จะใช้เครื่องมือนี้และหากจำเป็นจริงๆในการสร้างผู้ใช้ที่มีประสิทธิภาพมากขึ้นอีกคน ภายในเครื่องมือ
ribamar
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.