2012-12-11 10 views
66

otrzymuję następujący błądSQL Server główny „dbo” nie istnieje,

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. 

Czytałem o ALTER AUTHORIZATION, ale nie mam pojęcia, co baza danych to dzieje się. Błąd ten jest coraz wypluć bardzo często i zwiększa dziennik błędów o około 1 GB każdego dnia.

+1

Prawdopodobnie jest to pytanie na miejscu DBA, ale czy to pomoże, jeśli dać więcej informacji o tym, kiedy pojawi się błąd, to znaczy co komenda nie może być wykonana.Istnieje wiele wyników wyszukiwania tego błędu, w tym [to pytanie] (http://stackoverflow.com/questions/2723061/sql-server-2008-product-failing-z-process-could-not-execute-sp- replcmds); czy spojrzałeś na nie i czy w jakikolwiek sposób pasują one do twojej sytuacji i konfiguracji? – Pondlife

Odpowiedz

107

Rozwiązałem ten problem, ustawiając właściciela bazy danych. Moja baza danych nie miała żadnego właściciela przed tym problemem. Wykonanie tego polecenia w swojej bazie danych, aby ustawić właściciela rachunku sysadmin:

use [YourDatabaseName] EXEC sp_changedbowner 'sa' 
+4

Zobacz szczegółowy artykuł tutaj: http://sqlserver-help.com/tag/cannot-execute-as-database-principal-because-tincipal/ – orberkov

+2

@hurleystylee, Twoje rozwiązanie faktycznie dobrze dla mnie. Mój DB miał właściciela btw. –

+0

Mam ten sam problem. Próbowałem uruchomić kwerendę przez @hurleystylee, ale nie zrobił nic. Kiedy sprawdziłem 'dbo' był nadal db_owner i nie mogę zrobić nic dla DBO. Robi się naprawdę frustrujące. Nie mogę nic zmienić. –

8

To może się zdarzyć, gdy baza danych jest przywrócić z innego serwera SQL lub instancji. W takim przypadku element zabezpieczeń "dbo" w bazie danych nie jest tym samym, co element zabezpieczeń na serwerze SQL, na którym odtworzono bazę danych. nie pytaj skąd to wiem ...

+0

Czy mogę Cię zapytać, jak rozwiązać ten problem? lol, właśnie to próbuję zrobić. Przenieś diagramy bazy danych między różnymi serwerami, a następnie zaimplementuj bazę danych. Dostałem ten błąd po zaimportowaniu pliku .bak i spróbowałem otworzyć folder diagramów. – gunslingor

+1

Hej, to działało dla mnie: http://dba.stackexchange.com/questions/50690/error-on-changing-ownership-of-database-from-files-page-in-database-properties-d – ironstone13

+0

@ ironstone13 nie działa dla mnie. Dostałem wiadomość, że nie mogę zepsuć dbo –

41

enter image description here

Do graficznie.

Baza danych kliknij prawym przyciskiem myszy -> Właściwości -> Pliki -> wybierz właściciel bazy danych -> wybrać [SA] - ok

+0

po raz kolejny rozwiązać mój problem, powołując się na tę odpowiedź. – teapeng

1

Wybrano odpowiedź a inne są dobre. Chcę tylko dać więcej wyjaśnienia w języku SQL. W tym samym rozwiązaniu nie ma (prawidłowego) właściciela bazy danych.

Konto właściciela bazy danych dbo, które jest wymienione w błędzie, jest zawsze tworzone z bazą danych. Wydaje się dziwne, że nie istnieje, ale możesz sprawdzić za pomocą dwóch wyborów (lub jednego, ale trzymajmy to prosto).

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

który pokazuje SID dbo użytkownika w bazie db_name i

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

aby pokazać wszystkie loginy (i ich identyfikatory SID) dla tej instancji serwera SQL. Zauważ, że nie zapisał żadnego prefiksu db_name, ponieważ każda baza danych zawiera te same informacje w tym widoku.

W przypadku błędu powyżej, nie będzie logowania z identyfikatorem SID przypisanym do użytkownika dbo bazy danych.

Jak wyjaśniono powyżej, zwykle dzieje się podczas przywracania bazy danych z innego komputera (gdzie baza danych i użytkownik dbo zostały utworzone przez różne logowania). Możesz to naprawić, zmieniając własność na istniejący login.

1

inny sposób to zrobić

ALTER AUTHORIZATION 
ON DATABASE::[DatabaseName] 
TO [A Suitable Login]; 
Powiązane problemy