SQL Server asıl “dbo” mevcut değil,


194

Aşağıdaki hatayı alıyorum

Cannot execute as the database principal because the principal "dbo" 
does not exist, this type of principal cannot be impersonated,
or you do not have permission.

Hakkında okudum ALTER AUTHORIZATION, ancak bunun hangi veritabanında olduğunu bilmiyorum. Bu hata çok sık tükürüyor ve hata günlüğünü her gün yaklaşık 1GB büyütüyor.


1
Bu muhtemelen DBA sitesi için bir sorudur, ancak hatanın ne zaman ortaya çıktığı, yani hangi komutun yürütülemediği hakkında daha fazla bilgi verirseniz yardımcı olacaktır. Ve bu soruyu içeren bu hata için birçok arama sonucu vardır ; Onlara baktınız ve durumunuza ve yapılandırmanıza herhangi bir şekilde uyuyorlar mı?
Pondlife

Yanıtlar:


414

Veritabanı sahibini ayarlayarak bu sorunu çözdüm. Veritabanımın bu sorundan önce sahibi yoktu. Sahibini sysadmin hesabına ayarlamak için veritabanınızda bu komutu yürütün:

use [YourDatabaseName] EXEC sp_changedbowner 'sa'

6
Ayrıntılı makaleye buradan bakın: sqlserver-help.com/tag/…
orberkov

8
@hurleystylee, çözümünüz aslında benim için iyi çalıştı. Benim DB sahibi btw vardı.
Keyvan Sadralodabai

Aynı sorunu yaşıyorum. Ben yürütülen @hurleystylee tarafından sorguyu çalıştırmayı denedim ama hiçbir şey yapmadı. Ne zaman ı ekose desenli dbohala db_owner oldu ve DBO için herhangi bir şey yapamam. Gerçekten sinir bozucu oluyor. Hiçbir şeyi değiştiremem.
Wairimu Murigi

@hurleystylee, lütfen komutun sözdizimini bulmak için yorumlara bakmak zorunda kalmayacak şekilde yanıtı düzenleyip tamamlamayı düşünün.
Ulysses Alves

2
@hurleystylee evet, gördüm. Bence bu cevap kendi başına daha eksiksiz oluyor.
Ulysses Alves

112

resim açıklamasını buraya girin

Grafiksel olarak yapın.

Veritabanı sağ tıklayın -> özellikler -> dosyalar -> veritabanı sahibini seçin -> [sa] seçin - tamam


bir kez daha bu cevaba geri dönerek sorunumu çözdüm.
teapeng

Başarmak! Teşekkür ederim!
alejandrob

DB diff SQL örneğinden geri yüklendi. Bu adımı izledim ve işe yaradı .. Teşekkürler!
dotnetavalanche


11

Bu, veritabanı farklı bir SQL sunucusundan veya örneğinden geri yükleme olduğunda da olabilir. Bu durumda, veritabanındaki güvenlik sorumlusu 'dbo', db'nin geri yüklendiği SQL sunucusundaki güvenlik sorumlusu ile aynı değildir. Bana bunu nasıl bildiğimi sorma ...


Size nasıl çözüleceğini sorabilir miyim? lol, ben de tam olarak bunu yapmaya çalışıyorum. Veritabanı diyagramlarını farklı sunucular arasında taşıyın ve sonra veritabanını uygulayın. .Bak dosyasını içe aktarıp diagrams klasörünü açmaya çalıştıktan sonra bu hatayı aldım.
gunslingor

1
Hey, bu benim için çalıştı: dba.stackexchange.com/questions/50690/…
ironstone13

@ ironstone13 benim için çalışmadı. Dbo
düşüremeyeceğim

8

bunu yapmanın başka bir yolu

ALTER AUTHORIZATION 
ON DATABASE::[DatabaseName]
TO [A Suitable Login];

6

Seçilen cevap ve bazılarının hepsi iyi. Sadece daha fazla SQL saf açıklaması vermek istiyorum. Aynı çözüm, (geçerli) bir veritabanı sahibi olmadığı anlamına gelir.

Yanlışlıkla dbobelirtilen veritabanı sahibi hesabı her zaman veritabanı ile oluşturulur. Bu yüzden var olmadığı garip görünüyor, ancak iki seçimle (veya bir tane ile kontrol edebilirsiniz, ancak basit tutalım).

SELECT [name],[sid] 
FROM [DB_NAME].[sys].[database_principals]
WHERE [name] = 'dbo'

dboDB_NAME veritabanında kullanıcının SID'sini gösteren ve

SELECT [name],[sid] 
FROM [sys].[syslogins]

Bu SQL sunucusu örneği için tüm girişleri (ve bunların SID'lerini) göstermek için. Herhangi bir db_name öneki yazmadı, çünkü her veritabanı bu görünümde aynı bilgilere sahip olduğuna dikkat edin.

Bu nedenle, yukarıdaki hata durumunda, veritabanı dbo kullanıcısına atanan SID ile giriş yapılmayacaktır .

Yukarıda açıklandığı gibi, genellikle başka bir bilgisayardan veritabanını geri yüklerken olur (burada veritabanı ve dbo kullanıcısı farklı oturum açma tarafından oluşturulur). Sahipliği mevcut giriş olarak değiştirerek düzeltebilirsiniz.



0

Güvenlik altında, yöneticiyi "oturum açmadan SQL kullanıcısı" olarak ekleyin, ana öğe ile aynı ada sahip şemanın sahibi olun ve sonra Üyelik'te db_owner olun.


Bu SSMS 2017'de bir şey yapmadı
Zimano

0

Ayrıca yanlışlıkla bir veritabanı bağlantı dizesi bir HA kurulumunda birincil veritabanı değil, salt okunur aynaya beslenirken bu hata vardı.


0

Mesajda belirtildiği gibi, kullanıcı için sahip olarak izin ayarlamanız gerekir. Böylece aşağıdakileri kullanabilirsiniz:

ALTER AUTHORIZATION 
ON DATABASE::[YourDBName]
TO [UserLogin];

Umarım yardımcı olur! Sizin için uygunsa yorum bırakın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.