Erreur avec SQL Server “EXÉCUTER”
J'ai la configuration suivante:
Il y a une DB SQL Server avec plusieurs tables qui ont des déclencheurs de l'ensemble (c'recueillons les données de l'historique). Ces déclencheurs sont CLR procédures stockées avec EXECUTE AS 'HistoryUser'
. Le HistoryUser
utilisateur est un simple utilisateur dans la base de données sans connexion. Il a assez d'autorisations d'accès en lecture à toutes les tables et écrire à la table d'historique.
Quand j'ai un backup de la DB et de la restaurer sur une autre machine (Machine Virtuelle dans ce cas, mais il n'a pas d'importance), les déclencheurs ne fonctionnent plus. En fait, aucune usurpation de l'identité de l'utilisateur fonctionne plus. Même une simple déclaration comme ce
exec ('select 3') as user='HistoryUser'
produit une erreur:
Ne peut pas exécuter la base de données principale, car le principal "HistoryUser" n'existe pas, ce type de capital ne peuvent pas être imités, ou vous n'avez pas la permission.
Je lire dans MSDN que cela peut se produire si le DB propriétaire est un utilisateur de domaine, mais il ne l'est pas. Et même si je l'ai changer pour quelque chose d'autre (solution recommandée) ce problème demeure.
Si je crée un autre utilisateur sans connexion, je peux l'utiliser pour usurpation d'identité de l'amende juste. C'est, cela fonctionne bien:
create user TestUser without login
go
exec ('select 3') as user='TestUser'
Je ne veux pas recréer tous ces déclencheurs, ainsi en est-il de toute façon comment je peux faire de l'existant HistoryUser
travail?
OriginalL'auteur Vilx- | 2009-04-28
Vous devez vous connecter pour publier un commentaire.
Détecter les Utilisateurs Orphelins, puis de les résoudre en les reliant à une connexion.
DÉTECTER:
UTILISEZ <database_name>;
ALLER;
sp_change_users_login @Action= "Rapport";
ALLER;
RÉSOUDRE:
La commande suivante reconstruire le serveur de connexion au compte spécifié par <login_name> avec la base de données de l'utilisateur spécifié par <database_user>:
UTILISEZ <database_name>;
ALLER
sp_change_users_login @Action='update_one',
@UserNamePattern='<database_user>',
@LoginName='<login_name>';
ALLER
https://msdn.microsoft.com/en-us/library/ms175475.aspx
OriginalL'auteur GretTNelson
Ce compte d'utilisateur ne le déclencheur exécuter en tant que.
Vous aurez besoin d'accorder à l'utilisateur d'USURPER les privilèges pour le Compte de l'Utilisateur HistoryUser.
Plus de détails ici
http://msdn.microsoft.com/en-us/library/ms181362.aspx
OriginalL'auteur Eoin Campbell
Ce type de problèmes qui se posent après le déplacement d'une base de données d'une machine à l'autre impliquent généralement incompatibles SID, même si je ne suis pas sûr si ou comment elle s'applique à votre cas. Essayez de laisser tomber et de re-création de la base de données de l'utilisateur, faire en sorte de rétablir son autorisations à ces tables.
Cela a fonctionné pour moi. Nous avons dû migrer la base de données à partir d'un autre serveur et a couru dans cette question.
OriginalL'auteur
C'est un "orphelins de l'utilisateur". Il l'habitude de travailler. Documentation claire sur ce point.
🙁
Fix "orphelins de l'utilisateur de l'état et il fonctionnera de nouveau
OriginalL'auteur Krzemo