|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | |||||
|
Futur Membre du Club
![]() Inscription : septembre 2011 Messages : 51 ![]() |
Bonjour à tous,
J'ai un problème de privilège avec mon code PL/SQL que je n'ai pas sous SQL. voici ma procédure dans son paquet : Code :
Code :
Citation:
J'ai lu que l'erreur ORA-06512 pouvait être du à une variable trop petite pour la valeur stockée. Cependant, modifier la taille de varchar2(100), n'a rien changé. Merci d'avance pour vos réponses ! |
|||||
|
|
00
|
|
|
#2 | ||
|
Futur Membre du Club
![]() Inscription : septembre 2011 Messages : 51 ![]() |
ce qui étrange, c'est que mon code fonctionne quand je remplace la requête :
Citation:
Citation:
|
||
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() ![]() Marius NituIngénieur développement logiciels Inscription : octobre 2007 Messages : 3 311 ![]() |
Bref, c’est un problème récurrent: en PL/SQL les privilèges doivent être accordés directement et non pas via des roles.
|
|
|
20
|
|
|
#4 |
|
Futur Membre du Club
![]() Inscription : septembre 2011 Messages : 51 ![]() |
ok je ne savais pas. Je vais donc voir avec mon DBA senior. Merci pour cette info étonnante !
|
|
|
00
|
|
|
#5 |
|
Membre Expert
![]() ![]() Franck PachotDBA Oracle Inscription : novembre 2007 Messages : 706 ![]() |
Bonjour,
Étonnant, mais il y a une raison à cela. Les rôles ne sont pas des privilèges acquis pour toujours. On peut activer ou désactiver un rôle au cours de la vie de l'appli. C'est quelque chose de dynamique. Utilisés lorsque les droits sont vérifiés au moment de l'exécution (ou plus précisément du parsing). Par contre, les procédures vérifient les privilèges au moment où elles sont compilées. Elles ont besoins de privilèges statiques définis au moment du déploiement de l'appli. Et ça c'est des grants directs. Cordialement, Franck.
__________________
A lire sur mon blog Oracle - Articles d'Experts des articles traduits en français de Jonathan Lewis, Tom Kyte, Doug Burns, Cary Millsap, Greg Rahn ...
|
|
40
|
|
|
#6 |
|
Membre Expert
![]() Inscription : août 2008 Messages : 1 271 ![]() |
Très bon complément Pachot.
J'en ajoute un plus ou moins lié à l'utilisation de la procedure mais c'est un bon reflexe à avoir. Il faut se méfier très fortement des requêtes dynamiques dues à leur risque d'injection sql. Le package dbms_assert permet de s'assurer que des noms de tables ou de colonnes passées dynamiquement ne sont pas vulnérables. (pour des valeurs USING suffit) Donc la chaîne create_tab devrait s'écrire : Code :
create_tab := 'CREATE TABLE ' || dbms_assert.simple_sql_name(table_name) || ' AS SELECT * FROM v$session'; |
|
|
20
|
Copyright © 2000-2012 - www.developpez.com