web-dev-qa-db-fra.com

Erreur SQL Server 2008 R2: 15023, l'utilisateur, le groupe ou le rôle existe déjà

J'ai une base de données de test avec laquelle j'ai des problèmes de permissions.
Je ne peux pas accéder à la base de données de rapports, et la documentation d'aide de l'application indique de procéder comme suit:

Resolution: 

1. Launch the SQL Server Management Studio and connect to the database server(s) hosting   the Vision and Reporting Server databases. 
2. Expand the security folder. 
3. Select logins and right click on the <username> user and choose properties. 
4. Click the User Mapping tab 
5.Make sure the following databases are selected in the Users mapped to this Login:

    ReportServer
    ReportServerTempDB
    Your Vision databases
    This maps the login/user to the respective databases.
6. As you select each database (including your Vision database), select the db_owner role in the Database role membership for: section. You must select this option for each database.

Lorsque je fais cela, j'obtiens l'erreur suivante:

"Create failed for user '<servername>\<username>'.  User, group, or role '<servername>\<username>' already exists in the current database. (Microsoft SQL Server, Error: 15023)"

J'ai googlé cette erreur et essayé la commande suivante sur chaque base de données:

 ALTER USER [<username>] WITH LOGIN = [<username>] 

Le message a indiqué que les commandes ont abouti, mais j'obtiens toujours l'erreur ci-dessus lorsque j'essaie de mapper chaque base de données comme indiqué ci-dessus.

Qu'est-ce que je rate?

Selon le commentaire de Kin (merci), j'ai essayé ceci: - J'ai fait un clic droit sur l'utilisateur et j'ai sélectionné: Connexion au script sous> Déposer et créer vers> Nouvelle fenêtre de requête. - J'ai exécuté la requête résultante et j'ai essayé de mapper les rôles utilisateur en sélectionnant à nouveau les deux autres bases de données et db_owner, mais je reçois toujours le même message d'erreur que ci-dessus.

Pensées??

16
brl8

Vous pouvez essayer un certain nombre de choses, et le succès de chacune dépendra probablement du rôle de serveur que vous avez.

Pour commencer, s'il ne s'agit que d'un ou deux utilisateurs, alors honnêtement, le moyen le plus simple consiste à supprimer l'utilisateur de la base de données de la base de données restaurée, et à condition qu'il existe déjà une connexion au serveur, remappez l'utilisateur de la base de données à la connexion au serveur à l'aide de SSMS. Si la connexion au serveur n'existe pas, créez-la, mappez l'utilisateur et hop! C'est parti.

Option suivante: si vous migrez un grand nombre d'utilisateurs, utilisez sp_help_revlogin. sp_help_revlogin est une procédure stockée fournie par Microsoft qui aidera à migrer les connexions d'un serveur à un autre, y compris les mots de passe et les SID. Voici un bon article à ce sujet SP_HELP_REVLOGIN

12
Cougar9000

J'utilise Auto_Fix avec sp_change_users_login dans mon environnement de développement pour résoudre ces problèmes (Erreur 15023). Évitez d'utiliser Auto_Fix dans des situations sensibles à la sécurité.

Auto_Fix: lie une entrée utilisateur dans la vue du catalogue système sys.database_principals dans la base de données actuelle à une connexion SQL Server du même nom. Si une connexion avec le même nom n'existe pas, une sera créée. Examinez le résultat de l'instruction Auto_Fix pour confirmer que le lien correct est en fait établi. Évitez d'utiliser Auto_Fix dans des situations sensibles à la sécurité.

sp_change_users_login 'AUTO_FIX', 'myuser'

Notez également que cette fonctionnalité peut être supprimée dans une future version de Microsoft SQL Server.

Autres références:

  1. l'utilisateur, le groupe ou le rôle SQL Server 2008 existe déjà dans la base de données actuelle
  2. CORRECTIF: Erreur 15023: l'utilisateur existe déjà dans les bases de données actuelles
  3. SQL mappe une connexion à un utilisateur existant
3
LCJ
ALTER USER [<username>] WITH LOGIN=[<username>]

Est la bonne approche.

Sinon, allez à:

Sécurité> Connexions> (votre nom d'utilisateur)> Propriétés> Mappage utilisateur

enter image description here

et remappez cet utilisateur à la base de données souhaitée.

Vous pouvez utiliser la requête suivante dans le contexte de votre base de données pour rechercher des orphelins:

select
    dp.name [user_name]
    ,dp.type_desc [user_type]
    ,isnull(sp.name,'Orhphaned!') [login_name]
    ,sp.type_desc [login_type]
from   
    sys.database_principals dp
    left join sys.server_principals sp on (dp.sid = sp.sid)
where
    dp.type in ('S','U','G')
    and dp.principal_id >4
order by sp.name
0