[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.