Je crée un utilisateur dans ma base de données avec la commande suivante:
CREATE USER Test WITHOUT LOGIN
J'ai créé un identifiant avec le nom de test.
Je souhaite lier l'utilisateur test avec la connexion de test.
Quand j'utilise la commande suivante:
EXEC sp_change_users_login 'Update_One', 'Test', 'Test'
SQL Server Erreur ci-dessous:
Msg 15291, Level 16, State 1, Procedure sp_change_users_login, Line 114
Terminating this procedure. The User name 'Test' is absent or invalid.
Et quand j'utilise la commande suivante:
ALTER USER Test WITH LOGIN = Test
SQL Server Erreur ci-dessous:
Msg 33016, Level 16, State 1, Line 2
The user cannot be remapped to a login. Remapping can only be done for users that were mapped to Windows or SQL logins.
Comment puis-je relier un utilisateur de test avec la connexion à tester.
Mon objectif de ce lien: je veux restaurer une base de données d'un serveur à un autre serveur et après la restauration complète, les utilisateurs de la carte avec la connexion existante sur le serveur.
merci d'avance.
Un utilisateur qui a été explicitement créé avec WITHOUT LOGIN
ne peut pas être mappé à une connexion après le fait.
Un utilisateur qui a été créé avec une connexion puis a perdu son association, par ex. Parce que la base de données a été déplacée vers un autre serveur, peut être remappée en créant d'abord une nouvelle connexion (n'importe quel nom) puis à l'aide de ALTER USER ... WITH LOGIN = ...
commande.
Pour démontrer, je vais créer une base de données tst
puis créer un identifiant tstlogin
et un utilisateur associé tstuser
dans tst
:
CREATE DATABASE tst;
GO
CREATE LOGIN tstlogin WITH PASSWORD = 'passw8rd';
GO
USE tst;
GO
CREATE USER tstuser FOR LOGIN tstlogin;
Pour montrer une association correcte, nous pouvons utiliser la requête suivante:
SELECT DP.sid,DP.name user_name, SP.name login_name
FROM sys.database_principals AS DP
LEFT JOIN sys.server_principals AS SP
ON DP.sid = SP.sid
WHERE DP.name = 'tstuser';
Cela se traduit par
SID user_name login_name
------------------------------------------ -------------- --------------
0xBF3D0CC874C72B469BEB4AA93845F59E tstuser tstlogin
Maintenant, nous allons laisser tomber le login tstlogin
DROP LOGIN tstlogin;
et revérifier notre utilisateur:
SELECT DP.sid,DP.name user_name, SP.name login_name
FROM sys.database_principals AS DP
LEFT JOIN sys.server_principals AS SP
ON DP.sid = SP.sid
WHERE DP.name = 'tstuser';
qui ne montre plus de connexion associée plus:
SID user_name login_name
------------------------------------------ -------------- --------------
0xBF3D0CC874C72B469BEB4AA93845F59E tstuser NULL
La prochaine étape consiste à créer une nouvelle connexion. (J'ai choisi un nom Diffenert à des fins de démonstration, mais cela pourrait aussi être le même nom.)
CREATE LOGIN tstlogin2 WITH PASSWORD = 'passw8rd';
Pour associer ce nouveau login avec notre utilisateur, nous pouvons utiliser le ALTER USER
déclaration:
ALTER USER tstuser WITH LOGIN = tstlogin2;
Vérification encore une fois l'association:
SELECT DP.sid,DP.name user_name, SP.name login_name
FROM sys.database_principals AS DP
LEFT JOIN sys.server_principals AS SP
ON DP.sid = SP.sid
WHERE DP.name = 'tstuser';
montre que la déclaration ALTER
a réussi:
SID user_name login_name
------------------------------------------ -------------- --------------
0xBF3D0CC874C72B469BEB4AA93845F59E tstuser tstlogin2
Si vous avez vraiment besoin de changer de "WITHOUT LOGIN
"L'utilisateur d'être un utilisateur" avec Connexion ", vous devrez déposer cet utilisateur et le recréer. Assurez-vous que dans ce cas pour script de script des autorisations d'abord, car la suppression d'un utilisateur provoque l'oublier SQL Server.