Vous ne pouvez pas exécuter une instruction ou un module incluant la clause EXECUTe AS après la restauration d’une base de données dans SQL Server 2005


Erreur n ° : 397455 (SQLBUDT)

Symptômes


Lorsque vous exécutez une instruction ou un module incluant la clause exécuter en tant que dans Microsoft SQL Server 2005, le message d’erreur suivant peut s’afficher :
Ne peut pas être exécuté en tant que principal de la base de données, car le principal « dbo » n’existe pas, ce type de principal ne peut pas être emprunté ou vous n’êtes pas autorisé à le faire.
Ce problème survient lorsque les conditions suivantes sont remplies :
  • Vous sauvegardez une base de données à partir d’une instance de SQL Server 2005. Ensuite, vous restaurez la base de données vers une instance de SQL Server 2005 installée sur un autre ordinateur.
  • L’instruction ou le module est exécuté en tant qu’utilisateur de la base de données DBO (propriétaire de la base de données).
  • Le propriétaire de la base de données est un utilisateur de domaine ou une connexion d’autorisation SQL Server. Remarque
    • Si un utilisateur du domaine possède la base de données, l’ordinateur sur lequel vous restaurez la base de données ne peut pas accéder au domaine.
    • Si une connexion d’autorisation SQL Server est propriétaire de la base de données, la connexion n’existe pas dans la nouvelle instance de SQL Server 2005.

Cause


Ce problème se produit car SQL Server 2005 ne peut pas obtenir les informations relatives au contexte lorsque vous tentez d’emprunter l’identité d’un utilisateur de base de données pour exécuter une instruction ou un module. SQL Server ne peut pas obtenir les informations relatives au contexte que vous essayez d’emprunter conformément aux conditions répertoriées dans la section « symptômes ». Si vous empruntez l’identité d’une connexion d’autorisation SQL Server, SQL Server ne trouve pas de connexion qui correspond à l’identificateur de sécurité (SID) de l’utilisateur emprunté. Si vous empruntez l’identité d’un utilisateur du domaine, le contrôleur de domaine ne trouve pas les informations relatives à l’utilisateur spécifique qui correspond à l’ID de l’utilisateur emprunté.

Solution de contournement


Pour contourner ce problème, remplacez le propriétaire de la base de données par un utilisateur valide de connexion ou de domaine. Pour cela, exécutez les instructions suivantes :
USE <DatabaseName>GOsp_changedbowner '<NewLogin>'
Remarque<DatabaseName> représente le nom de la base de données. <NewLogin> représente le nom de la connexion que vous voulez définir.

Statut


Microsoft a confirmé l'existence de ce problème dans les produits Microsoft figurant dans la liste des produits concernés par cet article.