277 votes

Le principal SQL Server "dbo" n'existe pas,

J'obtiens 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 base de données dans laquelle cela se produit. Cette erreur est très fréquente et fait grossir le journal des erreurs d'environ 1 Go chaque jour.

10voto

Mugiwara Points 592

Une autre façon de procéder

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

7voto

Bizniztime Points 547

La réponse choisie et d'autres sont toutes bonnes. Je veux juste donner une explication plus pure de SQL. La solution est la même : il n'y a pas de propriétaire (valide) de la base de données.

Compte du propriétaire de la base de données dbo qui est mentionné dans l'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 selects (ou un seul, mais restons simples).

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

qui indique le SID de dbo dans la base de données DB_NAME et

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

pour afficher toutes les connexions (et leurs identifiants) pour cette instance de serveur SQL. Remarquez qu'il n'y a pas de préfixe db_name, c'est parce que toutes les bases de données ont les mêmes informations dans cette vue.

Ainsi, en cas d'erreur ci-dessus, il y a ne sera pas se connecter 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 d'une base de données à partir d'un autre ordinateur (où la base de données et l'utilisateur dbo ont été créés par un login différent). Vous pouvez y remédier en changeant la propriété de la base de données par le login existant.

0voto

David Zamula Points 1

Sous Sécurité, ajoutez le principal en tant qu'"utilisateur SQL sans login", faites-lui posséder le schéma avec le même nom que le principal, puis dans Adhésion, faites-en le db_owner.

0voto

fiat Points 1542

Cette erreur s'est également produite lorsqu'une chaîne de connexion de base de données a été accidentellement fournie au miroir en lecture seule - et non à la base de données primaire dans une configuration HA.

0voto

Comme l'indique le message, vous devez définir l'autorisation en tant que propriétaire pour votre utilisateur. Vous pouvez donc utiliser ce qui suit :

ALTER AUTHORIZATION 
ON DATABASE::[YourDBName]
TO [UserLogin];

J'espère que cela vous aidera ! Laissez un commentaire si cela vous convient.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X