web-dev-qa-db-fra.com

La connexion a déjà un compte sous un nom d'utilisateur différent

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 ce que cela nom d'utilisateur différent est pour mon compte de connexion?

30
Jack

Cela signifie que la connexion [R2Server\AAOUser] est déjà mappée à un utilisateur dans cette base de données. Ou, en d'autres termes, un autre utilisateur de base de données utilise cette connexion. Vous pouvez voir quel utilisateur de base de données utilise votre connexion avec la requête suivante:

use YourDB
go
SELECT su.name as DatabaseUser
FROM sys.sysusers su
join sys.syslogins sl on sl.sid = su.sid
where sl.name = 'test' -- login

PS: une version du script qui n'utilise pas les vues de compatibilité:

Select sp.name as LoginName, sp.type_desc as LoginType,
    dp.name as DBUser, dp.type_desc as UserType
from sys.server_principals sp
join sys.database_principals dp on dp.sid = sp.sid
where sp.name = 'test' -- your login
32
Marian

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 ceux que vous avez superposés. C'est pourquoi j'ai essayé ci-dessous, ce qui a résolu le problème pour moi.)

  1. 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).

  2. Notez les autorisations sur la base de données donnant l'erreur, juste pour référence.

  3. Décochez cette base de données et enregistrez la connexion.
  4. Réexécutez maintenant votre requête pour ajouter la connexion/le rôle dans la base de données cible. Il devrait fonctionner parfaitement.
4
CK in CLE