WITH EXECUTE AS OWNER - Datenbank anhängen

15/07/2009 - 17:38 von Lutz Elßner | Report spam
Ich habe die Datenbank Dateien kopiert und an einen anderen SQL Server angehàngt.
Bei Prozeduren, die WITH EXECUTE AS OWNER enthalten, kommt nun folgender Fehler:

System.Data.SqlClient.SqlException: Die Ausführung als Datenbankprinzipal ist nicht möglich, weil der Prinzipal 'dbo' nicht
vorhanden ist, für diesen Typ von Prinzipal kein Identitàtswechsel möglich ist, oder Sie nicht die erforderliche Berechtigung haben.

bei System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)

bei System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)

bei System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream,
BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)

bei System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)

bei System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean
returnStream, Boolean async)

bei System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream,
String method, DbAsyncResult result)

bei System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)

bei System.Data.SqlClient.SqlCommand.ExecuteNonQuery()


Der OWNER ist übrigens dbo.
Aufgerufen wird die Prozedur im Kontext einer Application Role, die in der Datenbank ja mit übertragen wurde, und EXECUTE Recht wohl
auch hat.

Scheinbar wird der dbo auf dem neuen Server aber nicht als gültig erkannt.
Was hier zu beachten?

Lutz
 

Lesen sie die antworten

#1 Elmar Boye
15/07/2009 - 22:47 | Warnen spam
Hallo Lutz,

"Lutz Elßner" <www.vb-hosting.de> schrieb ...
Ich habe die Datenbank Dateien kopiert und an einen anderen SQL Server angehàngt.
Bei Prozeduren, die WITH EXECUTE AS OWNER enthalten, kommt nun folgender Fehler:

System.Data.SqlClient.SqlException: Die Ausführung als Datenbankprinzipal ist nicht möglich, weil der Prinzipal 'dbo' nicht
vorhanden ist, für diesen Typ von Prinzipal kein Identitàtswechsel möglich ist, oder Sie nicht die erforderliche Berechtigung
haben.

Der OWNER ist übrigens dbo.
Aufgerufen wird die Prozedur im Kontext einer Application Role, die in der Datenbank ja mit übertragen wurde, und EXECUTE Recht
wohl auch hat.

Scheinbar wird der dbo auf dem neuen Server aber nicht als gültig erkannt.



Der Schema "dbo" (= Datenbankbesitzer) ist immer vorhanden.
Nur die Frage ist, welches Konto damit verbunden ist?
Ein hàufiger Fall - unabhàngig von EXECUTE AS - ist, dass das
Konto (Prinzipal), das mit dbo verbunden ist, auf dem anderen
Server nicht vorhanden bzw. nicht ausreichend berechtigt ist.

Überprüfe das mal und àndere ggf. den Besitzer mit sp_changedbowner:
http://msdn.microsoft.com/de-de/lib...78630.aspx
bzw. ALTER AUTHORIZATION ON DATABASE::Datenbank TO Konto

Gruß Elmar

Ähnliche fragen