[SQL Server] Utiliser WITH EXECUTE AS pour exécuter un script SQL

En SQL Server, vous pouvez utiliser WITH EXECUTE AS pour exécuter un script SQL en changeant le contexte de l’exécution sous un autre utilisateur. Cela est utile pour tester des permissions ou exécuter des commandes avec des privilèges spécifiques.

Syntaxe de base :

EXECUTE AS USER = 'nom_utilisateur';

REVERT; -- revenir au contexte d'origine

Exemple :

Si vous voulez exécuter une requête sous un utilisateur spécifique :

EXECUTE AS USER = 'Zouhaier';

SELECT CURRENT_USER;  -- Vérifier sous quel utilisateur le script s'exécute

SELECT * FROM Sales.Orders; -- Exécuter une requête avec les permissions de Zouhaier

REVERT;  -- Revenir au contexte de l'utilisateur original

Utilisation avec une procédure stockée :

Si vous voulez définir une procédure stockée qui s’exécute sous un autre contexte :

CREATE PROCEDURE dbo.MaProcedure

WITH EXECUTE AS 'Zouhaier'

AS

BEGIN

    SELECT CURRENT_USER;  -- Vérifier l'utilisateur en cours

    SELECT * FROM Sales.Orders;

END;

GO

Avec EXECUTE AS CALLER, SELF ou OWNER :

  • CALLER : La procédure s'exécute avec les permissions de l'utilisateur qui l'appelle (par défaut).
  • SELF : Utilise le créateur de la procédure.
  • OWNER : Utilise le propriétaire du schéma où est définie la procédure.

Exemple :

CREATE PROCEDURE dbo.MaProcedure

WITH EXECUTE AS OWNER

AS

BEGIN

    SELECT * FROM Sales.Orders;

END;

GO

Après exécution d’un EXECUTE AS, utiliser toujours REVERT pour revenir au contexte d'origine.