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 ALTER AUTHORIZATION
, mais je n'ai aucune idée de la base de données dans laquelle cela se produit. Cette erreur est crachée très fréquemment et augmente le journal des erreurs d'environ 1 Go chaque jour.
Réponses:
J'ai résolu ce problème en définissant le propriétaire de la base de données. Ma base de données n'avait pas de propriétaire avant ce problème. Exécutez cette commande dans votre base de données pour définir le propriétaire sur le compte sysadmin:
la source
dbo
c'était toujours le db_owner et je ne peux rien faire à DBO. Cela devient vraiment frustrant. Je ne peux rien changer.Faites graphiquement.
Base de données clic droit -> propriétés -> fichiers -> sélectionner le propriétaire de la base de données -> sélectionner [sa] - ok
la source
KB913423 - Vous ne pouvez pas exécuter une instruction ou un module qui inclut la clause EXECUTE AS après avoir restauré une base de données dans SQL Server 2005
la source
Cela peut également se produire lorsque la base de données 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 base de données n'est pas le même que le principal de sécurité sur le serveur SQL sur lequel la base de données a été restaurée. Ne me demandez pas comment je sais cela ...
la source
une autre façon de le faire
la source
Réponse sélectionnée et quelques autres sont toutes bonnes. Je veux juste donner une explication plus pure SQL. Cela revient à la même solution qu'il n'y a pas de propriétaire de base de données (valide).
Le compte du propriétaire de la base de données
dbo
mentionné par erreur est toujours créé avec la base de données. Il semble donc étrange qu'il n'existe pas, mais vous pouvez vérifier avec deux sélections (ou une, mais restons simple).qui montre le SID de l'
dbo
utilisateur dans la base de données DB_NAME etpour afficher toutes les connexions (et leurs SID) pour cette instance de serveur SQL. Notez qu'il n'a pas écrit de préfixe db_name, car chaque base de données a les mêmes informations dans cette vue.
Donc, en cas d'erreur ci-dessus, il n'y aura pas de connexion avec le SID attribué à l'utilisateur de la base de données dbo.
Comme expliqué ci-dessus, cela se produit généralement lors de la restauration de la base de données à partir d'un autre ordinateur (où la base de données et l'utilisateur dbo ont été créés par une connexion différente). Et vous pouvez le résoudre en changeant la propriété de la connexion existante.
la source
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 base de données.
Échec de la réplication de SQL Server 2008 avec: le processus n'a pas pu exécuter 'sp_replcmds'
la source
Sous Sécurité, ajoutez le principal en tant qu '"utilisateur SQL sans connexion", rendez-lui propriétaire du schéma avec le même nom que le principal, puis dans Membership, faites-le db_owner.
la source
Il y avait également cette erreur lors de la transmission accidentelle d'une chaîne de connexion de base de données au miroir en lecture seule - pas à la base de données principale dans une configuration HA.
la source
Comme le message l'indique, vous devez définir l'autorisation en tant que propriétaire de votre utilisateur. Vous pouvez donc utiliser ce qui suit:
J'espère utile! Laissez un commentaire si cela vous convient.
la source
Dans mon cas, j'ai eu cette erreur en essayant de me faire passer pour un autre utilisateur. Par exemple
Et comme la base de données a été importée d'un autre environnement, certains de ses utilisateurs ne correspondaient pas aux connexions SQL Server.
Vous pouvez vérifier si vous rencontrez le même problème en exécutant le (obsolète) sp_change_users_login (en mode "Rapport"), ou utilisez la requête suivante:
Si dans cette liste montre l'utilisateur que vous essayez d'emprunter votre identité, vous pouvez probablement le réparer en attribuant à l'utilisateur de base de données la connexion appropriée sur votre serveur. Par exemple:
la source