J'exécute la requête suivante sur une base de données:
execute as user = 'domain\username'
select * from fn_my_permissions(null, 'DATABASE')
order by subentity_name, permission_name
revert;
Mais l'erreur suivante est levée:
Cannot execute as the database principal because the principal "dev\spadmin" does not exist, this type of principal cannot be impersonated, or you do not have permission.
L'utilisateur est le dbo de la base de données, et lorsque j'ouvre les propriétés dans le studio de gestion, je peux voir qu'il est associé à cette connexion. Fonctionnement EXECUTE AS LOGIN = 'domain\username'
renvoie en revanche des résultats. Et si je lance explicitement EXECUTE AS USER = 'dbo'
, J'obtiens des résultats. J'ai également une base de données différente où ce même scénario renvoie des résultats avec les deux EXECUTE AS USER
et EXECUTE AS LOGIN
.
Dans un autre scénario avec un autre utilisateur, j'ai exécuté EXECUTE AS LOGIN = 'domain\username'
et je n'obtiens pas de résultats, mais j'obtiens des résultats avec EXECUTE AS USER = 'domain\username'
.
Dans ces scénarios, les deux utilisateurs sont associés à des connexions membres de db_owner
pour la base de données.
Quelqu'un peut-il me dire pourquoi ces requêtes ne renvoient pas les résultats que j'attends? Et faites-moi savoir si je manque des informations importantes. Merci!
Le problème est dû au fait que la connexion domain\username
est le dbo de la base de données, cela également signifie que le nom de l'utilisateur correspondant dans cette base de données est dbo
et - pas domain\username
.
courir ALTER AUTHORIZATION ON DATABASE::[<yourdb>] TO [sa]
J'ai eu la même erreur pour une procédure stockée que j'ai écrite.
J'ai trouvé que l'erreur était due à la façon dont j'avais spécifié le nom de la base de données dans la requête
SELECT emp_no
FROM db_name.employee
WHERE emp_no = 1234
J'exécutais la procédure le db_name2
une fois que j'ai supprimé le nom de la base de données de mon script
SELECT emp_no
FROM employee
WHERE emp_no = 1234
cela a bien fonctionné.
Je ne pense pas que les droits d'accès réduits du journal permettent l'utilisation d'autres bases de données ou le use db_name
commande.