Le principal de SQL Server «dbo» n’existe pas,

Je reçois l’erreur suivante

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. 

J’ai lu sur ALTER AUTHORIZATION , mais je n’ai aucune idée de la firebase database dans laquelle cela se passe. Cette erreur se produit très fréquemment et augmente le journal des erreurs d’environ 1 Go par jour.

J’ai résolu ce problème en définissant le propriétaire de la firebase database. Ma firebase database n’avait eu aucun propriétaire avant ce problème. Exécutez cette commande dans votre firebase database pour définir le propriétaire sur le compte sysadmin:

 use [YourDatabaseName] EXEC sp_changedbowner 'sa' 

entrer la description de l'image ici

Faire graphiquement.

Clic droit sur la firebase database -> propriétés -> fichiers -> sélectionner le propriétaire de la firebase database -> sélectionner [sa] – ok

 USE [] GO sp_changedbowner '' -- you can use 'sa' as a quick fix in databases with SQL authentication 

KB913423 – Vous ne pouvez pas exécuter une instruction ou un module qui inclut la clause EXECUTE AS après avoir restauré une firebase database dans SQL Server 2005

Cela peut également se produire lorsque la firebase database est une restauration à partir d’un serveur ou d’une instance SQL différent. Dans ce cas, le principal de sécurité «dbo» dans la firebase database n’est pas le même que le principal de sécurité sur le serveur SQL sur lequel la firebase database a été restaurée. Ne me demande pas comment je sais ça …

une autre façon de le faire

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

Si ce qui précède ne fonctionne pas, essayez ce qui suit. Cela a résolu le problème pour moi même lorsque le propriétaire était bien défini pour la firebase database.

Echec de la réplication de SQL Server 2008 avec: le processus n’a pas pu exécuter ‘sp_replcmds’

La réponse choisie et quelques autres sont toutes bonnes. Je veux juste donner une explication plus pure en SQL. Il en vient à la même solution qu’il n’y a pas de propriétaire de firebase database (valide).

Le compte propriétaire de firebase database dbo mentionné en erreur est toujours créé avec la firebase database. Il semble donc étrange qu’elle n’existe pas, mais vous pouvez vérifier avec deux sélections (ou une mais gardons les choses simples).

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

qui montre le SID de l’utilisateur dbo dans la firebase database DB_NAME et

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

pour afficher toutes les connexions (et leurs SID) pour cette instance de serveur SQL. Notez qu’il n’a écrit aucun préfixe db_name, car chaque firebase database contient les mêmes informations dans cette vue.

Donc, en cas d’erreur ci-dessus, il n’y aura pas de connexion avec SID affecté à l’utilisateur de firebase database dbo.

Comme expliqué ci-dessus, cela se produit généralement lors de la restauration d’une firebase database à partir d’un autre ordinateur (où la firebase database et l’utilisateur dbo ont été créés par des identifiants différents). Et vous pouvez y remédier en changeant de propriétaire en connexion existante.

Sous Sécurité, ajoutez le principal en tant qu ‘”utilisateur SQL sans connexion”, faites-lui posséder le schéma avec le même nom que le principal, puis dans Membership, rendez-le propriétaire de la firebase database.