อะไรคือความแตกต่างระหว่างผู้ใช้ `dbo 'และเจ้าของฐานข้อมูลที่เก็บไว้ใน sys.database


11

เราเพิ่งมีคำถามเกิดขึ้นที่ผู้ใช้dboในฐานข้อมูลมีsidที่ไม่ตรงกับในowner_sid sys.databasesฉันเข้าใจว่าเจ้าของฐานข้อมูลแตกต่างจากสมาชิกของบทบาทอย่างไรdb_ownerแต่ฉันคิดเสมอว่าผู้ใช้dboนั้นเป็นเจ้าของฐานข้อมูลจริง นั่นไม่ใช่กรณีหรือไม่ และถ้าเป็นเช่นนั้นมีความแตกต่างที่แท้จริงระหว่างdboและมีอะไรsys.databasesบ้าง?

คำตอบ:


8

ฉันคิดเสมอว่าผู้ใช้dboเป็นเจ้าของฐานข้อมูลจริง

นั่นคือ (หรืออย่างน้อยควรจะ) ถูกต้อง ชื่อ "dbo" ของผู้ใช้ที่ไม่เคยเปลี่ยนแปลงยัง SID พื้นฐานไม่ขึ้นอยู่กับผู้สร้างฐานข้อมูลหรือผู้ที่ได้รับการตั้งค่าให้เป็นทางsp_changedbowner (ถึงแม้ว่าและรวมถึง SQL Server 2005) หรือการเปลี่ยนแปลงอนุมัติ (เริ่มต้นด้วย SQL เซิร์ฟเวอร์ 2008)

ในทั้งสามกรณีบันทึกในsys.databasesนั้นก็จะถูกเปลี่ยนเพื่อให้พวกเขาได้รับการซิงค์ อย่างไรก็ตามเมื่อทำการกู้คืนฐานข้อมูลไม่ว่าจากระบบอื่นหรือจากอินสแตนซ์เดียวกัน แต่จากฐานข้อมูลที่ถูกสำรองข้อมูล / แยกออกก่อนที่คำสั่ง SQL 2 คำสั่งเหล่านี้จะถูกดำเนินการเพื่อเปลี่ยนเจ้าของจากนั้นเรียกคืนหรือแนบ เป็นไม่ตรงกันระหว่างowner_sidคอลัมน์ในsys.databasesและ "dbo" sidในsys.database_principalsในฐานข้อมูลนั้น

เท่าที่ฉันทราบบันทึกในsys.database_principalsแต่ละ DB เป็นเจ้าของจริงและowner_sidคอลัมน์ในsys.databasesเป็นเรื่องของการเก็บบันทึก / ความสะดวกสบาย (คล้ายกับ denormalization โดยไม่มีsys.databasesระบบจะต้องทำการแยกแบบสอบถามในฐานข้อมูลทั้งหมดเพื่อ รับข้อมูลนั้นทุกครั้งที่ร้องขอ!) และความปลอดภัย สิ่งหนึ่งที่ใช้คือการระบุฐานข้อมูลที่เรียกคืน / แนบที่อาจเป็นอันตราย / ไม่ถูกต้องคือระเบียนเหล่านั้นไม่ตรงกัน ความพยายามในการเข้าถึง SQLCLR Assemblies ที่ทำเครื่องหมายเป็นEXTERNAL_ACCESSหรือUNSAFEไม่โหลดถ้ามีคนเลือกที่จะเปิดเส้นทางที่ปลอดภัยน้อยกว่าในการเปิดใช้งานTRUSTWORTHYซึ่งขึ้นอยู่กับ SID "dbo" เนื่องจากจำเป็นต้องตรงกับการเข้าสู่ระบบที่มีEXTERNAL ACCESS ASSEMBLYหรือUNSAFE ASSEMBLYการอนุญาต และเมื่อมีความไม่ตรงกันใน SID ระหว่างมุมมองแค็ตตาล็อกทั้งสองระบบจะไม่สามารถกำหนดได้ว่าจะใช้รายการใดและใช้เป็นธงสีแดงเนื่องจากมีปัญหาด้านความปลอดภัยที่อาจเกิดขึ้น ในความเป็นจริงฉันทดสอบเงื่อนไขนี้ในสคริปต์การติดตั้งสำหรับSQL #เพื่อแจ้งเตือนผู้อื่นให้ทำการเปลี่ยนแปลงที่เหมาะสมเพียงเพื่อให้พวกเขาไม่ต้องเสียเวลาล่ามันลงในกรณีที่ SQL Server บ่นเกี่ยวกับเรื่องนี้ในบางจุด

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