Normalement, lorsque je crée une procédure stockée, jutilise ce qui suit comme modèle de tri
Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end
Existe-t-il un moyen dinclure loctroi de lautorisation dexécution uniquement sur cette procédure stockée pendant que jy suis?
Par exemple, comme …
Grant execute [User_Execute]
… mais uniquement pour cette procédure stockée?
Jai vu quelques autres questions similaires mais elles semblent toutes faire référence à TOUTES les procédures stockées et pas seulement à une, ni nen ai vu une où vous pouvez spécifier des autorisations dans le script create procedure
. Même les réponses sur la façon dont je peux définir des autorisations sans linterface graphique pour des procédures stockées spécifiques seraient les bienvenues.
Modifier La réponse principale ma certainement pointé dans la bonne direction, cest essentiellement Je cherchais, je nai pas pensé à grouper les commandes, ce que jai fini par faire, à grouper la commande avec ma procédure stockée. Quoi quil en soit, je pense que cest plutôt simple.
Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end GO GRANT EXECUTE ON <procedurename> to <username> GO
Commentaires
- Le code fourni dans le texte modifié est valide et la bonne réponse à cette question.
Réponse
GRANT EXECUTE ON dbo.procname TO username;
Réponse
truncate table La définition de lautorisation sur des objets tels que les procédures stockées peut être effectuée avec:
GRANT EXECUTE ON <schema>.<object> to <user>;
Cependant, vous pouvez également accorder des droits de sécurité sur à la fois le niveau de connexion et dutilisateur. Vous voudrez déterminer et accorder UNIQUEMENT les droits nécessaires pour les objets qui nécessitent un accès (comme lexécution). Envisagez dutiliser la fonction EXECUTE AS
qui permet lemprunt didentité dun autre utilisateur pour valider les autorisations nécessaires pour exécuter le code SANS avoir à accorder 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.
Ajouter au code comme suit dans la procédure stockée:
CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER
Dans ce cas, vous vous faites passer pour le propriétaire du module appelé. Vous pouvez également usurper lidentité de SELF, OU lutilisateur créant ou modifiant le module OU … imperonate CALLER, ce qui permettra au module daccepter les autorisations de lutilisateur actuel, OU … usurper lidentité du PROPRIÉTAIRE, qui prendra lautorisation du propriétaire de la procédure appelée OU … usurper lidentité de « nom_utilisateur », qui usurpera lidentité dun utilisateur spécifique OU … usurpera lidentité de « nom_connexion » avec usurpera lidentité dune connexion spécifique.
La plupart du temps, vous le ferez il suffit daccorder des droits EXECUTE
sur les processus stockés, puis les droits sont accordés à tous les objets référencés dans le processus stocké.
De cette manière, vous NAVEZ PAS besoin de donner des droits implicites (exemple: mettre à jour des données ou appeler des procs supplémentaires). Le chaînage de propriété gère 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 à prendre en compte pour cela.
Cet exemple peut aider à clarifier tout cela:
Créez un utilisateur appelé NoPrivUser avec 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 EXIGERA CRÉER DES DROITS 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 clause EXECUTE AS
, la procédure stockée est exécutée dans le contexte du propriétaire de lobjet. Ce code crée avec succès dbo.MyTable
et les lignes sont insérées avec succès. Dans cet exemple, lutilisateur NoPrivUser
na absolument aucun droit accordé pour modifier la table, ou lire ou modifier les données de cette table.
Cela ne prend que sur les droits nécessaires pour accomplir cette tâche spécifique codée DANS le cadre de cette procédure.
Cette méthode de création de procédures stockées pouvant effectuer des tâches qui nécessitent des droits de sécurité élevés sans attribuer ces droits de manière permanente est très utile.
Commentaires
- Ceci est la même réponse que vous avez publiée sur SO hier , qui Jai également dû formater pour la lisibilité.
Réponse
sélectionnez la connexion à la base de données -> Allez dans Sécurisable et cliquez sur le bouton Rechercher comme dans limage précédente. En cliquant sur le bouton Rechercher, vous trouverez la fenêtre suivante pour ajouter le type d’objet.
Cliquez sur le bouton Types d’objet et vous obtiendrez la fenêtre «Sélectionner les types d’objet» avec divers objets. Maintenant, si vous voyez, la procédure stockée est répertoriée dans la zone des types dobjets. Nous allons maintenant sélectionner notre procédure stockée spécifique sur laquelle nous voulons donner une autorisation.
Commentaires
- Premièrement, la question avait plus de cinq ans lorsque vous y avez répondu. Ce serait bien, sauf que lOP a spécifiquement demandé des solutions qui nutilisent pas ' linterface graphique et peuvent être intégrées dans un script. Votre réponse ne répond pas à cela.