ORA_INVOKING_USERID |
Appel l'identificateur d'utilisateur Oracle |
|---|---|
| Oracle Database SQL | Oracle 12c Release 1 (12.1) ou supérieure |
Syntaxe
| ORA_INVOKING_USERID |
Description
Cette fonction permet de retourner l'identifiant numérique (USERID) de l'utilisateur qui a déclenché l'exécution d'un bloc PL/SQL, d'une fonction ou d'une procédure, selon le même principe que ORA_INVOKING_USER mais en identifiant numérique.
Remarques
- Lien avec l'invocateur : La fonction ORA_INVOKING_USERID permet d'identifier l'utilisateur à l'origine d'un appel de code, mais sous forme d'un identifiant numérique interne à Oracle. Cet identifiant correspond à la valeur de la colonne USER_ID dans la vue système ALL_USERS. Ce format est souvent préféré pour les traitements internes ou pour les comparaisons rapides dans les jointures avec les tables du dictionnaire Oracle.
- Différence avec ORA_INVOKING_USER : Contrairement à ORA_INVOKING_USER retournant un nom d'utilisateur sous forme de texte, ORA_INVOKING_USERID renvoie une valeur numérique entière. Cela réduit les risques d'erreurs liées à la casse ou aux espaces, et optimise les performances lorsqu'il s'agit de filtrer ou de rechercher dans des ensembles volumineux de données système.
- Utilité en audit interne : Dans des scénarios d'audit, il est fréquent d'enregistrer les identifiants numériques plutôt que les noms d'utilisateur. Les valeurs retournées par ORA_INVOKING_USERID sont plus stables dans le temps, même si un utilisateur est renommé, car Oracle conserve le même USER_ID tant que le compte n'est pas supprimé et recréé.
- Comportement en privilèges définis par l'invocateur : Cette fonction prend tout son sens dans les procédures stockées définies avec AUTHID CURRENT_USER. Elle permet de savoir quel utilisateur réel a déclenché l'appel, même si l'exécution se fait via un autre schéma ou via des chaînes d'appels imbriqués, offrant ainsi un contrôle précis sur les droits applicables.
- Compatibilité avec les scripts PL/SQL : Dans des scripts automatisés, l'utilisation de l'identifiant numérique facilite la gestion de permissions, car il est plus simple d'écrire des conditions basées sur des entiers que sur des chaînes de caractères. Cela diminue aussi les risques d'erreurs typographiques dans le code.
- Performance dans les comparaisons : Les comparaisons d'entiers, comme celles utilisant la valeur de ORA_INVOKING_USERID, sont généralement plus rapides que celles basées sur des chaînes. Dans des systèmes critiques où les procédures sont exécutées des milliers de fois par seconde, cette optimisation peut avoir un impact mesurable.
- Usage combiné avec les vues du dictionnaire : En associant la valeur retournée par ORA_INVOKING_USERID à la vue DBA_USERS ou ALL_USERS, il est possible de récupérer rapidement le nom associé, son état (actif, verrouillé, expiré) et d'autres métadonnées. Cela donne une flexibilité accrue pour les diagnostics ou les rapports.
- Sécurité et restrictions : Bien que cette fonction donne accès à l'ID utilisateur, elle ne révèle pas d'informations sensibles comme les mots de passe ou les rôles attribués. Toutefois, dans des environnements multi-tenant, il faut veiller à ne pas exposer cette information à des utilisateurs non autorisés, car elle peut être exploitée pour analyser la structure interne de la base.
- Impact sur la portabilité : L'utilisation de ORA_INVOKING_USERID est spécifique à Oracle et n'a pas d'équivalent direct dans d'autres SGBD comme SQL Server ou PostgreSQL. Les scripts qui s'appuient sur cette fonction nécessiteront donc des ajustements si la base doit être migrée vers un autre moteur.
- Gestion des appels indirects : Si une procédure A appelle une procédure B dans un autre schéma, et que cette dernière utilise ORA_INVOKING_USERID, c'est bien l'utilisateur initial (ayant lancé A) qui sera identifié, et non celui qui possède B. Cela permet de conserver une traçabilité claire dans des architectures modulaires.
- Précision temporelle : Cette fonction reflète l'utilisateur ayant lancé la session au moment de l'appel, même si des changements de contexte de sécurité ont lieu durant l'exécution. Cela assure une cohérence d'identification tout au long du traitement, utile dans des transactions longues.
- Disponibilité et versions : Introduite avec Oracle 12c Release 1 (12.1), cette fonction n'est pas disponible dans les versions antérieures. Pour assurer la compatibilité avec des environnements mixtes, il est possible de créer une fonction personnalisée qui simule son comportement à l'aide de SYS_CONTEXT et d'autres vues internes.
Dernière mise à jour : Dimanche, le 29 Juin 2025