Privilèges d’exécution du code SQL
Tous les objets de métadonnées contenant du code DML ou PSQL peuvent être exécutés dans l’un des modes suivants :
-
Avec des privilèges d’utilisateur appelant (privilèges
CURRENT_USER
) ; -
En définissant les privilèges de l’utilisateur (propriétaire de l’objet de métadonnées).
Historiquement, tous les modules PSQL sont exécutés avec les privilèges de l’utilisateur appelant par défaut.À partir de Firebird 4.0, il est maintenant possible de spécifier des objets de métadonnées à exécuter par l’utilisateur appelant ou définissant.Ceci est fait avec l’option SQL SECURITY
, qui peut être spécifiée pour une table, un trigger, une procédure, une fonction ou un package.Si l’option INVOKER
est sélectionnée, l’objet de métadonnées sera exécuté avec les privilèges de l’utilisateur appelant.Si l’option DEFINER
est sélectionnée, l’objet de métadonnées sera exécuté avec les privilèges de l’utilisateur qui le définit (propriétaire). Ces privilèges s’ajouteront aux privilèges accordés au module PSQL lui-même à l’aide de l’opérateur GRANT.
Les privilèges d’exécution avec lesquels tout module PSQL est exécuté par défaut (non spécifiés par le module lui-même) peuvent être modifiés à l’aide de la commande
ALTER DATABASE SET DEFAULT SQL SECURITY {DEFINER | INVOKER}
L’option INVOKER est utilisée par défaut pour maintenir une compatibilité ascendante.
Note
|
Remarques
|
Dans les procédures stockées, les fonctions et les triggers, vous pouvez vérifier l’utilisateur effectif actuel, c’est-à-dire l’utilisateur dont les privilèges sont en cours d’exécution, en utilisant la variable de contexte système EFFECTIVE_USER
de l’espace de noms SYSTEM
.
select RDB$GET_CONTEXT('SYSTEM', 'EFFECTIVE_USER') from RDB$DATABASE;
Note
|
Le même objet peut être appelé dans différents contextes de sécurité et nécessiter des privilèges différents.Par exemple, nous avons :
Si l’utilisateur Si l’utilisateur |