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