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