Saya selalu berpikir pengguna dbo
adalah pemilik sebenarnya dari database.
Itu (atau setidaknya harus) benar. Nama "dbo" dari Pengguna itu tidak pernah berubah, namun SID yang mendasarinya tergantung pada siapa yang membuat basis data, atau siapa yang ditetapkan melalui sp_changedbowner (meskipun, dan termasuk, SQL Server 2005) atau ALAM OTOMATIS (dimulai dengan SQL Server 2008).
Dalam ketiga kasus tersebut, catatan di sys.databases
juga diubah sehingga mereka tetap sinkron. Namun, ketika mengembalikan Database, baik dari sistem lain atau dari Instance yang sama tetapi dari DB yang dicadangkan / dilepaskan sebelum salah satu dari 2 perintah SQL yang dijalankan untuk mengubah pemilik, kemudian pada KEMBALIKAN kembali atau melampirkan, akan ada menjadi ketidakcocokan antara owner_sid
kolom sys.databases
dan "dbo" sid
di sys.database_principals
dalam DB itu.
Sejauh yang saya ketahui, catatan dalam sys.database_principals
setiap DB adalah pemilik sebenarnya , dan owner_sid
kolom dalam sys.databases
adalah masalah pencatatan / kenyamanan (mirip dengan denasionalisasi; tanpa sys.databases
sistem akan perlu membuat pertanyaan terpisah di semua DB untuk dapatkan info itu, setiap kali diminta!) dan keamanan. Satu hal yang digunakan untuk mengidentifikasi DB yang berpotensi berbahaya / dipulihkan / dilampirkan adalah rekaman yang tidak cocok. Mencoba mengakses SQLCLR Assemblies yang ditandai sebagai EXTERNAL_ACCESS
atau UNSAFE
tidak akan dimuat jika seseorang memilih untuk menempuh rute yang kurang aman untuk diaktifkan TRUSTWORTHY
karena bergantung pada SID "dbo" karena perlu mencocokkan dengan Login yang memiliki salah satu EXTERNAL ACCESS ASSEMBLY
atauUNSAFE ASSEMBLY
izin. Dan ketika ada ketidaksesuaian dalam SID antara dua pandangan katalog sistem, tidak dapat ditentukan mana yang akan digunakan, dan digunakan sebagai tanda bahaya karena ada kemungkinan masalah keamanan. Bahkan, saya menguji untuk kondisi ini dalam skrip instalasi untuk SQL # untuk mengingatkan seseorang untuk membuat perubahan yang tepat, hanya agar mereka tidak perlu membuang waktu memburunya jika SQL Server mengeluh tentang hal itu di beberapa titik.