truncate table La définition de permissions sur des objets tels que les procédures stockées peut être réalisée avec:
GRANT EXECUTE ON <schema>.<object> to <user>;
Toutefois, vous pouvez également vouloir accorder des droits de sécurité au niveau de la connexion et de l'utilisateur. Vous voudrez déterminer et accorder UNIQUEMENT les droits nécessaires pour les objets nécessitant un accès (tels que l'exécution). Envisagez d'utiliser la EXECUTE AS
fonctionnalité qui permet l'emprunt d'identité d'un autre utilisateur pour valider les autorisations nécessaires à l'exécution du code SANS octroyer tous les droits nécessaires à tous les objets sous-jacents (par exemple, les tables). EXECUTE AS
peut être ajouté aux procédures stockées, fonctions, déclencheurs, etc.
Ajoutez le code comme suit directement dans la procédure stockée:
CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER
Dans ce cas, vous personnifiez le propriétaire du module appelé. Vous pouvez également emprunter l'identité de SELF, OU l'utilisateur qui crée ou modifie le module OU ... un appelant impeccable, ce qui permettra à ce module de prendre les autorisations de l'utilisateur actuel, OU ... d'usurper l'identité du propriétaire, qui obtiendra l'autorisation du le propriétaire de la procédure appelée OU ... emprunte l'identité de "nom_utilisateur", qui empruntera l'identité d'un utilisateur spécifique OU ... empruntant l'identité de "nom_utilisateur" avec l'identité d'un identifiant spécifique.
La plupart du temps, il vous suffira d'octroyer des EXECUTE
droits aux procédures stockées, puis des droits seront accordés à tous les objets référencés dans la procédure stockée.
De cette façon, vous n'avez PAS besoin de donner des droits implicites (exemple: mettre à jour des données ou appeler des procs supplémentaires). Le chaînage des propriétés s’occupe de cela pour vous. Ceci est particulièrement utile pour SQL dynamique ou si vous devez créer des tâches de sécurité élevées telles que CREATE TABLE
. EXECUTE AS
est un outil pratique à considérer pour ceux-ci.
Cet exemple peut aider à clarifier tout cela:
Créez un utilisateur appelé NoPrivUser avec un accès public à une base de données (par exemple, dbadb):
USE [master];
GO
CREATE LOGIN [NoPrivUser] WITH PASSWORD=N'ABC5%', DEFAULT_DATABASE=[dbadb],
CHECK_EXPIRATION=ON, CHECK_POLICY=ON;
GO
USE [DBAdb];
GO
CREATE USER [NoPrivUser] FOR LOGIN [NoPrivUser];
GO
REMARQUE: LE CRÉATEUR OU LE PROPRIÉTAIRE DE CETTE PROCÉDURE EXIGE DES DROITS DE CRÉATION DE TABLE dans la base de données cible.
use DBAdb
go
CREATE PROCEDURE dbo.MyProcedure
WITH EXECUTE AS OWNER
truncate table MyTable
GO
GRANT EXEC ON dbo.MyProcedure TO NoPrivUser;
GO
-- Now log into your database server as NoPrivUser and run the following.
Avec la EXECUTE AS
clause, la procédure stockée est exécutée dans le contexte du propriétaire de l'objet. Ce code crée avec succès dbo.MyTable
et les lignes sont insérées avec succès. Dans cet exemple, l'utilisateur ne NoPrivUser
dispose d'aucun droit absolu de modifier la table, de lire ou de modifier les données de cette table.
Il ne prend que les droits nécessaires pour mener à bien cette tâche spécifique, codée DANS LE contexte de cette procédure.
Cette méthode de création de procédures stockées pouvant effectuer des tâches nécessitant des droits de sécurité élevés sans affecter ces droits de manière permanente est très utile.