11
votes

Problème de cartographie utilisateur de connexion dans SQL Server 2008

A pendant le moment, j'ai configuré une base de données sous SQL Server 2008 appelée MyDB sous Windows XP, puis sous Logins sous le serveur, j'ai cliqué sur les propriétés de mon ordinateur Nom de connexion Comp23 / andrew et mappée de la base de données MyDB à cet effet en utilisant dbowner comme ses droits. .

Puis j'ai cloné cette installation XP en tant que sauvegarde, visa installée, réalisant que je ne voulais pas que Vista j'ai réexécuté mon copie XP d'origine sur la même machine. Cependant, la cartographie de la DB a vraiment confondu! Fondamentalement sous le serveur Login Comp23 \ Andrew, il est indiqué que c'est mappé à MyDB, mais lorsque je clique sur MyDB et regardez ses utilisateurs, ce n'est pas là. Je pense que c'est perdu sa cartographie de SID car elle pense à sa nouvelle machine.

Sous le serveur Login Comp23 \ Andrew Je ne peux pas dépasser la cartographie à MyDB comme lorsque je le fais, dit "Impossible de supprimer l'utilisateur DBO". Je ne peux pas modifier l'utilisateur DBO non plus - cela ne me laissera pas. Mais je ne peux pas non plus afficher l'utilisateur sous les utilisateurs de MyDB! Ce qui signifie que je ne peux pas vous connecter via les paramètres de mon site Web (ASP.NET web.config)! Lorsque je vous connecte, il suffit de ne pas ouvrir la base de données "MYDB" demandée par le login. Le login a échoué. La connexion a échoué pour l'utilisateur 'comp23 \ aspnet'

Des idées? Comment je peux remapper cela correctement? J'ai même essayé de réinstaller SQL Server 2008, mais le nom de l'ordinateur est toujours mappé sur la base de données.


0 commentaires

4 Réponses :


15
votes

Parce que DBO est le propriétaire de la base de données, sa cartographie doit être modifiée en modifiant le propriétaire de la base de données:

ALTER AUTHORIZATION ON database::[<yourdb>] TO [sa];


1 commentaires

Cette solution fonctionne pour moi. Merci Remus! J'ai eu cette situation: le domaine \ OldusR ne fonctionne plus dans notre société. Domaine \ OldusR mappé comme "DBO" (voir sous Mappings d'utilisateur) pour plusieurs DBS. Cela causait des problèmes lorsque j'essayais d'utiliser les tâches> "Copier la base de données" de l'assistant pour copier la DB d'une machine à une autre. J'avais cette erreur: Impossible de trouver le principal "domaine \ oldusr", car il n'existe pas ou que vous n'ayez pas la permission. Exécution de la requête ci-dessus laissa tomber le mappage d'utilisateurs (en tant que DBO) de cette DB. Donc, à la fin, je pourrais copier la DB à l'aide de la base de données Tâches> Copier.



0
votes

Depuis que vous avez mentionné le problème de mappage SID, avez-vous essayé d'utiliser sp_change_users_login code> ? Utilisez l'option Autofix pour repousser votre identifiant sur celui de la base de données.

Pour votre exemple ci-dessus, vous devez exécuter ce qui suit lors de la connexion à la base de données P>

EXEC `sp_change_users_login` @Action = 'autofix', @LoginName = 'COMP23\ASPNET'


0 commentaires

2
votes

Tout d'abord, vous ne pouvez pas avoir de points de citation entourant le nom de la procédure stockée. Deuxièmement, ce n'est pas autofix mais auto_fix.

Enfin, une fois que ces corrections sont effectuées, vous obtenez ce message d'erreur:

msg 15600, niveau 15, état 1, procédure sp_change_users_login, ligne 181 Un paramètre ou une option non valide a été spécifié pour la procédure 'sys.sp_change_users_login'.

Lorsque vous exécutez cette commande: xxx


0 commentaires

0
votes
USE [Database]
GO

ALTER USER [dbo] WITH NAME=[username]
GO

sp_changedbowner 'sa' 
GO

1 commentaires

Tandis que ce code Snippet peut résoudre la question, Y compris une explication aide vraiment à améliorer la qualité de votre message. N'oubliez pas que vous répondez à la question des lecteurs à l'avenir, et ces personnes pourraient ne pas connaître les raisons de votre suggestion de code.