J'ai restauré une base de données et créé un nouvel utilisateur (le même utilisateur à partir duquel je me suis connecté) en tant que db_owner. Maintenant, quand j'ai voulu voir le diagramme de la base de données, j'ai eu une erreur
Les objets de prise en charge du diagramme de base de données ne peuvent pas être installés car cette base de données n'a pas de propriétaire valide. Pour continuer, utilisez d'abord la page des fichiers de la boîte de dialogue Propriétés de la base de données ou l'instruction Alter Authorization pour définir le propriétaire de la base de données sur une connexion valide, puis ajoutez les objets de prise en charge de la base de données
Maintenant, quand j'ai essayé de changer la propriété de la page Fichiers des propriétés de la base de données, j'obtiens une erreur
Échec de la définition du propriétaire pour la base de données 'ABC'. (Microsoft.SqlServer.SMO) Informations supplémentaires: une exception s'est produite dans SMO Le nouveau propriétaire de la base de données proposé James-PC\James est mappé en tant qu'utilisateur James dans cette base de données. Nom du paramètre: James-PC\James "
Veuillez m'aider à résoudre le problème afin que je puisse voir les diagrammes de base de données sur cet ordinateur après avoir restauré la sauvegarde de la base de données à partir d'un autre système.
Le propriétaire de la base de données est la connexion dans sys.server_principals à laquelle appartient la base de données, telle que définie par son SID. Après une restauration, il se peut facilement que la connexion utilisée pour restaurer la base de données ne soit pas celle qui était le propriétaire précédent de la base de données. (Cela est encore plus susceptible de se produire lorsque la base de données est déplacée entre les serveurs.)
Il peut donc y avoir trois paramètres avec lesquels vous rencontrez des problèmes
La base de données owner_sid n'est pas égale à la base de données db_owner sid. Vous pouvez comparer cela pour la base de données ABC en:
SELECT owner_sid FROM sys.databases où name = 'ABC';
SELECT sid from ABC.sys.database_principals WHERE name = 'dbo';
Ensuite, vous recevez un message indiquant que votre base de données propriétaire owner_sid existe également en tant qu'utilisateur dans sys.database_principals. Nous le savons grâce au message d'erreur concernant le mappage du propriétaire proposé.
Vos étapes sont donc:
USE ABC;
DROP USER James;
ALTER AUTHORIZATION ON DATABASE::ABC TO [James-PC\James];
Vous avez supprimé l'utilisateur qui n'est pas nécessaire, car vous en faites le dbo. Une fois que cela a été supprimé, votre identifiant peut devenir le propriétaire de la base de données.
EDIT: Vous pouvez également utiliser SSMS pour supprimer l'utilisateur James de la base de données ABC. Vous pouvez ensuite revenir à l'onglet Fichier des propriétés de la base de données pour définir le propriétaire de la base de données. (Désolé, j'ai tendance à penser aux scripts.)