คุณมีอย่างน้อยสองตัวเลือก
อันแรกใช้ประโยชน์จากการสืบค้นขนาดเล็กและแก้ไขข้อความ เราต้องรวบรวมแบบแผนความสนใจของเรา:
SELECT nspname
FROM pg_namespace;
คุณสามารถเพิ่มส่วนWHERE
คำสั่งถ้าคุณต้องการ จำกัด ขอบเขต คัดลอกเอาต์พุตและแก้ไขเพื่อให้คุณได้GRANT USAGE ON SCHEMA ... TO your_role;
รับคำสั่งจำนวนมาก จากนั้นให้ป้อนpsql
ตัวอย่างเช่น:
psql -f multigrant.sql
ตัวแปรปกติของสิ่งนี้อาจเป็นเชลล์สคริปต์ที่วนรอบชื่อและการเรียกที่รวบรวมไว้psql
ซึ่งส่งผ่านGRANT
ข้อความสั่งที่สร้างไปยัง-c
ตัวเลือก
โซลูชันอื่นทำแบบเดียวกันในบล็อก pl / pgsql หนึ่งบล็อกโดยสร้างคิวรีแบบไดนามิก แกนกลางเหมือนกัน - เราต้องรวบรวม schemata จากนั้นเราวนลูปทั้งหมดของพวกเขาอนุญาตสคีมาการอนุญาตตามสคีมา:
DO $do$
DECLARE
sch text;
BEGIN
FOR sch IN SELECT nspname FROM pg_namespace
LOOP
EXECUTE format($$ GRANT USAGE ON SCHEMA %I TO your_role $$, sch);
END LOOP;
END;
$do$;
หมายเหตุ :
- แตกต่างจากตารางลำดับฟังก์ชันและประเภทหนึ่งไม่สามารถตั้งค่าสิทธิ์เริ่มต้นสำหรับ schemata (ณ วันที่ 9.4) คุณจะต้องให้สิทธิ์นี้สำหรับสคีมาที่เพิ่มใหม่ด้วยตนเอง
- ที่นี่ฉันกำลังใช้ข้อความดอลลาร์เมื่อสร้างคิวรีแบบไดนามิก สิ่งนี้อนุญาตให้ฉันใช้ไวยากรณ์ 'ปกติ' ซึ่งตรงข้ามกับการเสนอราคาแบบทวีคูณเช่น (ไม่มีอยู่ในตัวอย่างนี้) วิธีนี้ผู้แก้ไขส่วนใหญ่จะเน้นข้อความอย่างดี
- ฉันยังใช้
format()
กับตัว%I
ระบุรูปแบบเพื่อให้ชื่อวัตถุถูกยกมาอย่างถูกต้องหากจำเป็น วิธีการนี้สามารถอ่านได้ง่ายกว่าการสร้างแบบสอบถามด้วยการต่อค่าคงที่สตริงและการquote_ident()
เรียกบางอย่าง
pg_namespace
สามารถพบได้ในpg_catalog
สคีมา ตรวจสอบวัตถุอื่น ๆ ที่อยู่ในนั้น - มันเก็บทุกแง่มุมของสกีมาของคุณตารางและอื่น ๆ
grant usage
สคีมาที่สร้างขึ้นใหม่ได้โดยใช้ทริกเกอร์เหตุการณ์ที่เรียกใช้สคีมาใหม่โดยอัตโนมัติหรือไม่