DECLARE GLOBAL TEMPORARY TABLE & pooling de connection

RPG (3 et 4, free), CL, SQL, etc...
Répondre
damz
Messages : 15
Enregistré le : mer. 27 nov. 2019, 16:16:58

DECLARE GLOBAL TEMPORARY TABLE & pooling de connection

Message par damz »

Bonjour

Si dans une procédure stockée je crée une table temporaire avec
DECLARE GLOBAL TEMPORARY TABLE.
Cette table n'est visible que dans la session de l'utilisateur et détruite avec la fin de la session.
Que se passe-t-il cependant avec le pooling de connections.
Y-a-t-il possibilité qu'un autre utilisateur" récupère" la session en question et donc un accès aux données de la table à cause de ce mécanisme ?

Merci

nbonnet
Messages : 198
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: DECLARE GLOBAL TEMPORARY TABLE & pooling de connection

Message par nbonnet »

Bonjour,

oui, si le pooling de connexion est activé, un job peut être réutilisé avec accès à QTEMP, aux tables et données contenues.
Sachant que le pooling se fait en tenant compte des paramètres de connexion (même utilisateur par exemple) : techniquement c'est le même utilisateur technique ...
Sinon il faut supprimer les tables temporaires avant de fermer la connexion.
Nathanaël

damz
Messages : 15
Enregistré le : mer. 27 nov. 2019, 16:16:58

Re: DECLARE GLOBAL TEMPORARY TABLE & pooling de connection

Message par damz »

Merci pour votre réponse.
Dans mon cas il s'agit d'une API REST qui ne récupère pas le contexte de sécurité de l'utilisateur et donc ce sera toujours le user paramétré dans la chaîne de connexion JDBC qui appellera la procédure stockée. La session sera donc partagée par tout le monde.
Ce n'est pas vraiment un problème car le traitement est lancé 5 à 6 fois par jour .. globalement par la même personne mais c'était pour éclaircir ce point.
Et puis pour blinder un peu, la connexion JDBC configurée est valide juste le temps de la requête avec un @RequestScope de Spring. C'est coûteux mais plus sûr.

Par ailleurs, je déclare mes tables avec un WITH REPLACE donc j'imagine que si la table est en cours d'utilisation, ça doit planter mais c'est à vérifier ça aussi.

DECLARE GLOBAL TEMPORARY TABLE SESSION.Warnings (REASON VARCHAR(500)) WITH REPLACE KEEP IN MEMORY NO;

Sinon, il doit aussi être possible de désactiver le pooling dans la chaine de connexion. JDBC..

Merci encore

Répondre