SQL Server principal "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 à propos de ALTER AUTHORIZATION , mais je n'ai aucune idée de la base de données dans laquelle cela se passe. Cette erreur se répand très fréquemment, et augmente le journal des erreurs d'environ 1 Go chaque jour.

91
demandé sur PBG 2012-12-11 19:43:47

8 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 mettre le propriétaire Sur le compte sysadmin:

use [YourDatabaseName] EXEC sp_changedbowner 'sa'
176
répondu Hogan 2018-03-05 20:39:10

enter image description here

Fait Graphiquement.

clic droit sur la base de données-- > propriétés-- > fichiers-- > sélectionner le propriétaire de la base de données-- > sélectionner [sa]-- ok

65
répondu dinesh vishe 2017-01-02 00:57:32
USE [<dbname>]
GO
sp_changedbowner '<user>' -- you can use 'sa' as a quick fix in databases with SQL authentication

KB913423 - vous ne pouvez pas exécuter une déclaration ou un module qui inclut la clause EXECUTE AS après avoir restauré une base de données dans SQL Server 2005

32
répondu user3779273 2016-08-17 12:12:49

cela peut également se produire lorsque la base de données est une restauration à partir d'un serveur SQL différent ou d'une instance. 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 le sais...

9
répondu Peter Huppertz 2016-08-26 09:25:06

une autre façon de le faire

ALTER AUTHORIZATION 
ON DATABASE::[DatabaseName]
TO [A Suitable Login];
4
répondu Mugiwara 2018-03-02 08:47:33

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.

SQL Server 2008 échec de la réplication avec: le processus ne peut pas exécuter 'sp_replcmds'

2
répondu AmarSharma 2017-05-23 11:55:07

réponse sélectionnée et quelques autres sont tous bons. Je veux juste donner une explication plus pure de SQL. Il vient à la même solution qu'il n'y a pas de propriétaire de base de données (valide).

compte du propriétaire de la base de données dbo qui est 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 simples).

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

qui montre SID de dbo utilisateur en Base de données DB_NAME et

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

pour afficher tous les logins (et leurs SIDs) pour cette instance SQL server. Remarquez qu'il n'a pas écrit de préfixe db_name, c'est parce que chaque base de données a la même information dans cette vue.

donc en cas d'erreur au-dessus de là ne sera pas connexion avec SID qui est assignée à l'utilisateur de base de données dbo.

comme expliqué ci-dessus qui se produit généralement lors de la restauration de 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). Et vous pouvez le corriger en changeant la propriété de connexion existante.

2
répondu Bizniztime 2017-12-08 14:28:37

sous Sécurité, ajouter le principal comme un "utilisateur SQL sans login", lui faire propre le schéma avec le même nom que le principal et puis dans L'adhésion le faire db_owner.

0
répondu David Zamula 2018-06-21 15:20:13