J'ai la configuration suivante:problème avec SQL Server « EXECUTE AS »
Il y a un DB SQL Server avec plusieurs tables qui ont des déclencheurs fixés sur eux (qui recueillent des données historiques). Ces déclencheurs sont des procédures stockées CLR avec EXECUTE AS 'HistoryUser'
. L'utilisateur HistoryUser
est un utilisateur simple dans la base de données sans connexion. Il a suffisamment d'autorisations pour lire dans toutes les tables et écrire dans la table d'historique.
Lorsque je sauvegarde la base de données et la restaure sur une autre machine (machine virtuelle dans ce cas, mais cela n'a pas d'importance), les déclencheurs ne fonctionnent plus. En fait, aucune usurpation d'identité pour l'utilisateur ne fonctionne plus. Même une simple déclaration comme ce
exec ('select 3') as user='HistoryUser'
produit une erreur:
Cannot execute as the database principal because the principal "HistoryUser" does not exist, this type of principal cannot be impersonated, or you do not have permission.
Je read in MSDN que cela peut se produire si le propriétaire DB est un utilisateur de domaine, mais ce n'est pas. Et même si je le change à n'importe quoi d'autre (leur solution recommandée) ce problème demeure.
Si je crée un autre utilisateur sans connexion, je peux très bien l'utiliser pour l'usurpation d'identité. C'est, cela fonctionne très bien:
create user TestUser without login
go
exec ('select 3') as user='TestUser'
Je ne veux pas recréer tous ces déclencheurs, donc est-il possible que je peux faire le travail HistoryUser
existant?
Bump: Désolé, mais c'est un peu urgent ...
Nop, ne permet pas. –