4 votes

SQL Server EXECUTE AS sur FN_TRACE_GETTABLE

J'essaie de permettre à un utilisateur de visualiser les données de suivi du serveur SQL à partir d'un fichier .trc sans lui donner l'autorisation d'accéder aux données de suivi. ALTER TRACE autorisations (SQL Server 2008 R2). J'ai donc mis en place une procédure stockée, en utilisant mon compte sysadmin :

CREATE PROCEDURE test_trace
as
SELECT * FROM FN_TRACE_GETTABLE(N'C:\temp\trace1.trc', 1)

Si j'exécute cette procédure stockée en utilisant mon compte sysadmin, elle s'exécute comme prévu. Si j'essaie de l'exécuter sous le compte domain1 \user1 mais il ne s'exécute pas, ce qui donne lieu à l'erreur suivante "You do not have permission to run 'FN_TRACE_GETTABLE'" . Ceci est à nouveau attendu.

Donc maintenant je veux laisser domain1\user1 exécuter la procédure stockée, donc je change la procédure stockée pour qu'elle s'exécute sous un compte sysadmin :

CREATE PROCEDURE test_trace 
WITH EXECUTE AS 'domain1\sysadmin1'
as
SELECT * FROM FN_TRACE_GETTABLE(N'C:\temp\trace1.trc', 1)

Maintenant, lorsque j'exécute la procédure stockée, j'obtiens "You do not have permission to run 'FN_TRACE_GETTABLE'" quel que soit le compte sous lequel je l'exécute ! Je m'attendais à pouvoir l'exécuter à la fois sous le compte domain1\user1 y domain1\sysadmin1 comptes.

Quelqu'un peut-il m'aider à trouver ce que j'ai manqué ? Mon objectif est de permettre domain1\user1 pour lire le trace1.trc sans leur donner ALTER TRACE permissions.

2voto

Remus Rusanu Points 159382

Vous devez utiliser signature du code pour élever les privilèges d'une manière contrôlée. Alors que dans le contexte d'une procédure EXECUTE AS, vous êtes dans un bac à sable et ne pouvez pas tirer parti d'un privilège de niveau serveur (comme les autorisations liées à la trace), les droits de lecture, les droits d'accès et les droits d'accès aux données. Extension de l'identification de la base de données en utilisant EXECUTE AS . La signature du code est également la solution appropriée à ce problème. Voir un exemple complet ici .

0voto

TToni Points 5201

Selon le documentation vous pouvez uniquement spécifier un nom d'utilisateur (de base de données) dans le champ execute as pour les procédures stockées. Je pense quand même que cela devrait normalement fonctionner, mais veuillez modifier le SP avec le compte sysadmin et spécifier EXECUTE AS SELF au lieu du nom de l'utilisateur.

Si cela ne fonctionne toujours pas, essayez de donner à l'utilisateur exécutant les droits de lecture sur le fichier de trace, peut-être que le serveur ignore le fichier de trace. execute as pour l'accès au fichier (ce que je considérerais comme un bogue).

0voto

David Smith Points 1

Copiez-collez le chemin d'accès dans une nouvelle fenêtre de l'explorateur et si vous obtenez une erreur, c'est que vous avez un problème. J'ai mis du temps à comprendre pourquoi SQL Server disait que le compte "sa" n'avait pas les permissions qu'il avait.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X