Lorsque j'exécute ce SQL:
USE ASPState
GO
IF NOT EXISTS(SELECT * FROM sys.sysusers WHERE NAME = 'R2Server\AAOUser')
CREATE USER [R2Server\AAOUser] FOR LOGIN [R2Server\AAOUser];
GO
J'obtiens l'erreur suivante:
La connexion possède déjà un compte sous un nom d'utilisateur différent.
Comment savoir quel est ce nom d'utilisateur différent pour mon compte de connexion?
dbo
affichée. Étrange, je ne me souviens pas avoir utilisé ledbo
pour mon compteR2Server\AAOUser
. Vous vous demandez ce que je dois faire ensuite.aspnet_regsql -E -S .\MSSQLSERVER_R2 -ssadd
pour créer laASPState
base de données. Je pense que probablement, je suis déjà prêt, même si je ne le réalise même pas en premier lieu.sys.server_principals
etsys.database_principals
.sysusers
etsyslogins
ne sont là que pour la compatibilité descendante.C'est une «chose de métadonnées» ...
Parfois, l'utilisateur de la base de données est «corrompu» au cours de tout ce qui se passe dans cette base de données. (J'ai vu un comportement similaire si la base de données est restaurée et que les rôles dans la copie restaurée diffèrent de celui que vous avez superposé. C'est pourquoi j'ai essayé ci-dessous, ce qui a résolu le problème pour moi.)
Ouvrez les propriétés de connexion dans SSMS -> (Sécurité | Connexions | ID utilisateur défaillant | Propriétés | Mappage utilisateur). Vous verrez probablement les bases de données déjà vérifiées et des rôles sont attribués (comme parfaitement normal).
Notez les autorisations sur la base de données donnant l'erreur, juste pour référence.
la source
Cannot drop the user 'dbo'. (Microsoft SQL Server, Error: 15150)
Cannot drop the user 'dbo'.
message d'erreur. J'ai couru ce script, qui a supprimé le mappage utilisateur problématique et résolu le problème:USE DATABASE_NAME; ALTER AUTHORIZATION ON DATABASE::DATABASE_NAME TO [sa]
. Pour plus d'informations, voici