0

Je suis en train d'implémenter une surveillance SQL Server rudimentaire pour surveiller un blocage excessif.Comment accorder un accès limité à sysprocesses dans SQL Server 2005?

J'ai une procédure stockée qui ressemble à ceci:

CREATE PROCEDURE [dbo].[bsp_GetBlockedProcessCount] 
AS 
BEGIN 
    SET NOCOUNT ON; 

    DECLARE @count INT 

    SELECT @count = COUNT(*) 
    FROM master.dbo.sysprocesses WITH (NOLOCK) 
    WHERE blocked > 0 

    RETURN @count 
END 

Lorsque j'exécute ce dans un contexte d'administrateur, je reçois la réponse correcte. Lorsque j'exécute ceci dans le contexte d'un utilisateur avec des privilèges limités (c'est-à-dire le serveur web), je reçois zéro indépendamment de la vraie réponse.

Je peux penser à quelques solutions mais je ne suis pas heureux l'un d'eux:

  1. Je peux accorder des privilèges d'ÉTAT VUE DU SERVEUR à l'utilisateur, mais qui est beaucoup plus de permissions que cet utilisateur doit avoir:

    Exécutez le proc à partir d'un travail SQL et placez les résultats quelque part pour le serveur Web à ramasser, mais c'est compliqué et compliqué. N'essayez pas de l'appeler depuis le serveur Web!

Je suis sûr qu'il existe une meilleure solution. Aucune suggestion?

Répondre

0

Je suis heureux que je ne connais pas les réponses de première main :) mais j'ai joué avec EXECUTE AS et Revert pour basculer entre les utilisateurs

Mais voici 2 bons liens pour commencer

Commutation stockées procédure Contexte d'exécution dans SQL Server à l'aide de la clause REVERT

résumé: vous accordez utilisateur à IMPERSONATE que dire DBA, puis revenir en arrière après

http://www.mssqltips.com/tip.asp?tip=1579

donner des autorisations par le biais de procédures stockées

Résumé: Je suis trop paresseux pour lire tout

http://www.sommarskog.se/grantperm.html