ฉันคิดเสมอว่าผู้ใช้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 บ่นเกี่ยวกับเรื่องนี้ในบางจุด