Dans mon cas, j'ai obtenu cette erreur en essayant de me faire passer pour un autre utilisateur. Par exemple
EXEC AS USER = 'dbo';
Et comme la base de données a été importée d'un autre environnement, certains de ses utilisateurs ne correspondaient pas aux identifiants de connexion du serveur SQL.
Vous pouvez vérifier si vous avez le même problème en exécutant la commande (obsolète) sp_change_users_login (en mode "Rapport"), ou utiliser la requête suivante :
select p.name,p.sid "sid in DB", (select serp.sid from sys.server_principals serp where serp.name = p.name) "sid in server"
from sys.database_principals p
where p.type in ('G','S','U')
and p.authentication_type = 1
and p.sid not in (select sid from sys.server_principals)
Si l'utilisateur que vous essayez d'usurper apparaît dans cette liste, vous pouvez probablement résoudre le problème en assignant l'utilisateur de la base de données au bon login dans votre serveur. Par exemple :
ALTER USER dbo WITH LOGIN = dbo;