Page 1 sur 1

DECLARE GLOBAL TEMPORARY TABLE & pooling de connection

Posté : jeu. 22 avr. 2021, 14:20:32
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

Re: DECLARE GLOBAL TEMPORARY TABLE & pooling de connection

Posté : ven. 23 avr. 2021, 21:17:25
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.

Re: DECLARE GLOBAL TEMPORARY TABLE & pooling de connection

Posté : ven. 30 avr. 2021, 16:56:25
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