Le forum (ô combien francophone) des utilisateurs de Powerbuilder.
Bonjour à tous,
J’ai un problème lors de l’exécution d’une procédure stockée. Je vous présente mon problème :
Lorsque je me connecte à l’application avec mon super user, il exécute bien ma procédure stockée (ça fonctionne bien), mais lorsque je me connecte avec un autre user la procédure stockée ne s’exécute plus.
mon super user avait les droits suivants : user_dba, user_connect, user_user, user_writer.
Même, j’ai tenté d’ajouter ces droits à mon nouveau user, mais toujours le problème persiste.
En fait, j’utilise la procédure stockée pour pouvoir insérer dans une table et dans une colonne, un champ a une taille très volumineuse (1 méga).
Merci pour vos aides
Dernière modification par mattdamon (08-10-2008 13:51:07)
Hors ligne
Bonjour matt,
Si tu es sous Oracle, vérifie que ta procédure stockée est bien déclarée sans préfixe du schéma du user de création
(genre mon_user.ma_procedure)
Hors ligne
faut voir aussi les synonyms et les droits d'execution ..
Hors ligne
Salut foon,
Oui je travaille sur Oracle 10g.
Est ce que tu parle sur la déclaration du procédure stockée dans Local External Function ?
si oui c'est vrai dans Local External Function j'ai déja la déclaré comme suit :
subroutine ma_procedure (string ls_mon_text ) RPCFUNC ALIAS & FOR "mon_super_user.nom_packages_sql.ma_procedure"
est-ce que tu pense que j'enlève le mon_super_user ?
Merci
Dernière modification par mattdamon (08-10-2008 12:10:34)
Hors ligne
mattdamon a écrit:
Code: pb
subroutine ma_procedure (string ls_mon_text ) RPCFUNC ALIAS & FOR "mon_super_user.nom_packages_sql.ma_procedure"
est-ce que tu pense que j'enlève le mon_super_user ?
Merci
Oui, je souhaiterais que tu l'enlèves. Ca va résoudre ton problème.
Bien entendu, il faut aussi que ton package soit déclaré ainsi sous ORACLE:
CREATE OR REPLACE PACKAGE nom_packages_sql IS....
Et non:
CREATE OR REPLACE PACKAGE mon_super_user.nom_packages_sql IS....
Hors ligne
Salut,
Je suppose que tu as crée ta procédure stockée avec le user "mon_super_user".
Si c'est le cas, je pense que tu devrais vérifier si tu as bien crée un synonym pour ta proc comme la dit JCZ, auquel cas seul "mon_super_user" peut exécuter ta procédure.
Hors ligne
J'ai vérifié bien la déclaration de package dans Oracle et c'est bien délarée...
même j'ai enlevé le nom_super_user mais toujours le problème...
subroutine ma_procedure (string ls_mon_text ) RPCFUNC ALIAS & FOR "nom_packages_sql.ma_procedure"
Une réponse à Nico : j'ai pas crée un synonym pour pour ma procédure, j'ai vérifié les autres packages ils contiennent tous un synonyms seulement mon package..
comment je pourrais créer un synonym ?
merci
Hors ligne
mattdamon a écrit:
comment je pourrais créer un synonym ?
Hors ligne
CREATE PUBLIC SYNONYM ma_procedure FOR mon_super_user.ma_procedure;
Hors ligne
Oui, mais je déconseille le "mon_super_user.ma_procedure" (problèmes de schéma en vue).
De plus, il vaut mieux attribuer le synonyme à tout le package (et non procédure par procédure)
Ca donnerai plutôt ceci:
CREATE PUBLIC SYNONYM mon_package FOR mon_package;
Hors ligne
Vérifie si ton user possède les droits necessaires :
grant execute any procedure to mon_user;
Dernière modification par nico (08-10-2008 13:33:37)
Hors ligne
Moi, je conseillerais d'écouter un peu Foon avant de faire les barbares...
Hors ligne
Merci à tous pour vos aides.
En fait la solution est comme suit :
dans l'exécution de ma packages Body, j'ai oublié une ligne importante :
GRANT EXECUTE ON xxx.mon_package TO xxx_user
avec xxx = mon super user
Cette ligne permet aux autres users qu'ont un droit xxx_user, d'exécuter ce packages...
On peut voir ça sous pl/sql developer : packages-->nom_package-->Granted to roles-->xxx_user
Dernière modification par mattdamon (08-10-2008 13:43:09)
Hors ligne