ใช้งานเกิน / ใช้งาน schema อย่างถูกต้อง?


9

ต้องถามคำถามนี้ในStackoverflowฉันสงสัยว่าสิ่งที่ฉันทำไปนั้นถูกต้องหรือเป็นแนวปฏิบัติที่ดีที่สุด

โดยทั่วไปวัตถุทุกชิ้นที่ฉันสร้างจะเข้าสู่สคีมาพร้อมกับชื่อสคีมาที่สะท้อนถึงการใช้งาน ตัวอย่างเช่นฉันมี schemas AuditและAdmin(ท่ามกลางคนอื่น ๆ )

dboนี้ในการเปิดใบไม่มีวัตถุใน ตกลงไหม มีอะไรอีกบ้างที่ฉันต้องทำ?


คำตอบ:


13

Schemas ไม่เพียง แต่เป็นเครื่องมือรักษาความปลอดภัยที่ยอดเยี่ยม (ซึ่งเป็นเหตุผลเพียงพอที่จะใช้) แต่ยังเหมาะสำหรับการแยกทางตรรกะ และดูเหมือนว่านี่คือสิ่งที่คุณกำลังฝึกซ้อม

แม้ว่าความต้องการในปัจจุบันไม่ต้องการความปลอดภัยเป็นพิเศษ แต่ให้บอกวัตถุทั้งหมดของฐานข้อมูลที่เกี่ยวข้องกับการตรวจสอบลงบนถนนเพื่อรักษาความปลอดภัยให้กับบทบาทของฐานข้อมูล หากวัตถุเหล่านี้กระจัดกระจายไปทั่วdboสคีมาคุณจะต้องได้denyรับอนุญาตอย่างชัดเจนในแต่ละวัตถุ แต่ด้วยAuditสคีมาคุณทำอย่างเดียวdenyและคุณตั้งอยู่

ฉันฝึกใช้สคีมาเป็นการส่วนตัว แม้ว่าทุกสิ่งในฐานข้อมูลจะมีสื่อที่มีความสุข ฉันจะไม่สร้างสคีมาสำหรับแต่ละระดับชั้นของชั้นข้อมูล มีสิ่งต่าง ๆ เช่น schemas และการแยกมากเกินไป แต่ฉันเดาว่าคุณไม่ได้อยู่ใกล้ทุกที่


5

รูปแบบทั่วไปคือสกีมาขึ้นอยู่กับการอนุญาตดังนั้นคุณจะต้องWebGUI, Desktopฯลฯ สำหรับรหัสดังนั้นวัตถุทั้งหมดที่มีการอนุญาตแบบเดียวกันจากคี

หากคุณมีกลุ่มผู้ใช้ที่ชัดเจนคุณสามารถอนุญาตได้ แต่คุณจะต้องมีสิทธิ์ทับซ้อนและยุ่งเหยิงในบางจุด ฉันมักจะเลื่อนการตรวจสอบผู้ใช้ / กลุ่มไปยังรหัสตรวจสอบภายในบางส่วนและไม่ใช่วัตถุสิทธิ์: บอกว่าคุณมีผู้ใช้ Admin และ HR Excel: Desktopรหัสเรียกใช้เหล่านี้ทั้งหมด

โดยทั่วไปข้อมูลจะถูกแชร์ดังนั้นฉันจึงมีDataสคีมาอาจจะเป็นHistoryหรือArchiveสคีมา

บางรหัสไม่เป็นสาธารณะ (เช่น UDF หรือ proc ภายใน) ดังนั้นฉันจะใช้Helperสคีมาสำหรับรหัสที่ไม่ควรรันด้วยรหัสลูกค้า

สุดท้ายสกีมาชอบStagingหรือSystemหรือMaintenanceบางครั้งก็เป็นประโยชน์

แม้ว่าจะไม่มีวัตถุผู้ใช้ในdboสคีมา แต่ผู้ใช้dboเป็นเจ้าของสกีมาทั้งหมด


4

ไม่มีวัตถุใดในdboสคีมาที่สมบูรณ์แบบ จากสิ่งที่ฉันเห็นว่าไม่มากเกินไปของ schemas เช่นกัน - แม้ว่ามีกี่ schema ที่ 'มากเกินไป' เป็นคำถามที่ค่อนข้างเป็นอัตนัย (มันเปรียบได้กับ

สิ่งเดียวที่ฉันจะพูดถึงคือการให้สิทธิ์กับสคีมามากกว่าแต่ละวัตถุ (คำถาม SO ของคุณไม่ได้ระบุอะไรเกี่ยวกับการอนุญาต)


ฉันมักจะสังคายนาสิทธิ์เมื่อสิ้นสุดการพัฒนาเนื่องจากเรามีข้อกำหนด "ของเหลว" ค่อนข้างบางครั้ง นี่เป็นวิธีที่คุณทำหรือไม่ หรือคุณกำหนดสิทธิ์เมื่อคุณสร้างวัตถุ ฯลฯ
Stuart Blackler

สร้างวัตถุกำหนดให้คีมากำหนดสิทธิ์ให้กับคี หากคุณต้องการการเข้าถึงแบบเปิดกว้างสำหรับการพัฒนาเพียงให้สิทธิ์แบบเต็มบนสคีมาและ จำกัด ให้แคบลงในภายหลัง
Simon Righarts

1

ฉันต้องการใช้สคีมาเพื่อแยกฐานข้อมูลตามโมดูลและรูปแบบการใช้งาน ฉันพบว่ามันทำให้ง่ายต่อการเข้าใจตารางฐานข้อมูลดังนั้นการบำรุงรักษาจึงง่ายขึ้น ฉันมีประเภทสคีมาต่อไปนี้ในโครงการเซิร์ฟเวอร์ SQL ล่าสุดของฉัน LT - ตารางการค้นหา

COMMON
LT_COMMON
MODULENAME1
LT_MODULENAME1
..

สำหรับโมดูลขนาดใหญ่เรายังแยกพวกเขาออกเป็นสคีมาเพิ่มเติม ตัวอย่างเช่นโมดูลบุคลากรประกอบด้วยมากกว่า 5 โมดูล

PERSONEL_COMMON
PERSONEL_FINANCE
PERSONEL_MODULE2
..
LT_PERSONEL_COMMON
LT_PERSONEL_FINANCE
LT_PERSONEL_MODULE2

นอกจากนี้เรายังรวมสกีมาไว้สำหรับกิจกรรมอื่น ๆ TEMP, MAINTANENCE ในสตูดิโอการจัดการคุณสามารถกรองโดยใช้ชื่อสคีมา ผู้พัฒนาที่รับผิดชอบใน MODULE1 กรองตามชื่อและทำงานเกือบตลอดเวลาด้วยตารางเหล่านี้เท่านั้น ทำให้ง่ายสำหรับนักพัฒนา dbas ผู้มาใหม่เหมือนกันเพื่อทำความเข้าใจตารางฐานข้อมูล


-1

วิธีปฏิบัติที่ดีที่สุดอาจแตกต่างกันสำหรับเซิร์ฟเวอร์ sql มากกว่า oracle แต่ประสบการณ์ของฉันคือ schemas ที่น้อยกว่าดีกว่า
ฉันชอบที่จะมีสคีมาสำหรับ dba / โปรแกรมเมอร์ที่มีสิทธิ์พิเศษและรหัสบางอย่างในการบำรุงรักษา ข้อมูลธุรกิจทั้งหมดควรเป็นแบบแผนเดียวเพื่อให้คุณทราบว่าอยู่ที่ไหน อนุสัญญาการตั้งชื่อก็เพียงพอที่จะแยกความแตกต่างระหว่างการใช้ตารางหรือรหัสที่เก็บไว้
ฉันสามารถดูกรณีที่คุณมีหลายหน่วยธุรกิจเนื่องจากข้อมูลที่แตกต่างกันโดยมีการเหลื่อมกันเล็กน้อยแต่ละหน่วยมีสคีมาของตนเอง มิฉะนั้นจะทำให้มันง่าย


2
schemas มีความแตกต่างกันใน SQL Server: มีการแยกฐานข้อมูลสคีผู้ใช้เต็มรูปแบบ ผมพบว่า schemas ออราเคิลจะถูก จำกัด
GBN
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.