Ben her zaman kullanıcı dboveritabanının gerçek sahibi olduğunu düşünmüştü .
Bu doğru (ya da en azından doğru). Bu Kullanıcının "dbo" adı asla değişmez, ancak temel alınan SID, veritabanını kimin oluşturduğuna veya kime sp_changedbowner (SQL Server 2005 dahil olmak üzere) veya ALTER AUTHORIZATION (SQL ile başlayarak ) olarak ayarlandığına bağlı olarak değişir. Server 2008).
Bu üç durumun hepsinde, kayıt sys.databasesda senkronize tutulacak şekilde değiştirilir. Ancak, başka bir sistemden veya aynı Eşgörünümden, ancak sahibini değiştirmek için yürütülmekte olan bu 2 SQL komutundan birinin öncesinde yedeklenen / ayrılan bir DB'den bir Veritabanını geri yüklerken, RESTORE veya add üzerine, bu DB'deki owner_sidsütun ile sys.databases"dbo" sidarasında bir uyumsuzluk olması sys.database_principals.
Bildiğim kadarıyla sys.database_principals, her DB'deki kayıt gerçek sahibidir ve içindeki owner_sidsütun sys.databaseskayıt tutma / kolaylık meselesidir (denormalizasyona benzer; sys.databasessistem olmadan tüm DB'ler arasında ayrı sorgular yapmak gerekmeyecek her bilgi talep edildiğinde bu bilgileri alın!) Kullanıldığı bir şey, potansiyel olarak zararlı / geçersiz geri yüklenen / eklenmiş DB'yi tanımlamaktır, bu kayıtların eşleşmemesidir. Biri olarak işaretlenen EXTERNAL_ACCESSveya UNSAFEdaha az güvenli etkinleştirme yoluna gitmeyi seçtiyse SQLCLR Montajlarına erişmeye çalışmak TRUSTWORTHY, "dbo" SID'sine bağlı olduğundan EXTERNAL ACCESS ASSEMBLYveyaUNSAFE ASSEMBLYizni. Ve bu iki sistem kataloğu görünümü arasında SID'de bir uyumsuzluk olduğunda hangisinin kullanılacağı belirlenemez ve potansiyel bir güvenlik sorunu olduğu için kırmızı bayrak olarak kullanılamaz. Aslında, SQL Server için bir komut dosyası bu durumu test etmek için uygun değişikliği yapmak için birini uyarmak için SQL Server bir noktada şikayetçi durumunda onu avlamak için zaman kaybetmek zorunda değilsiniz.