IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Oracle Discussion :

Requete correcte mais invalide dans le package


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut Requete correcte mais invalide dans le package
    Bonjour,

    Difficile de trouver un titre adapté avec peu de caractères

    Voilà; j'ai une requête SQL que j'exécute sous SQL*PLUS et qui fonctionne correctement.

    Je tente de l'exécuter à l'intérieur d'un package.. j'ai un joli message Table ou vue inexistante.

    J'ai testé la requête, elle est 100% pareille..
    J'ai testé le package avec les 2 types d'AUTH ID..
    L'utilisateur qui exécute la requête sous SQL*PLUS, qui complile le package et qui appelle la fonction sont pareils ! (j'ai même fait un (user()) pour être certain.. vive la paranoïa).

    Voici la requête..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    	SELECT SUM(a.BYTES) /1024 /1024 ,b.AUTOEXTENSIBLE, b.MAXBYTES 
    	INTO schemaSize, isExtensible, maxSize 
    	FROM sys.dba_segments a,sys.dba_data_files b 
    	WHERE  a.OWNER = 'WEI' AND a.tablespace_name = b.tablespace_name 
    	GROUP BY a.OWNER,b.AUTOEXTENSIBLE,b.MAXBYTES;
    Une idée ?

  2. #2
    Membre expérimenté
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Par défaut
    A mon avis, c'est un problème de droits, tu n'as pas accès aux droits donnés par rôles quand tu utilises une procédure PL/SQL.
    Vu que tu utilises des vues du dictionnaire, tu dois donc explicitement donner le privilège SELECT CATALOG ROLE à l'utilisateur concerné.

    Oups, au temps pour moi, c'est SELECT_CATALOG_ROLE en fait

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Il faut donner le privilège sur la table ou la vue directement (càd sans utiliser un rôle):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    SQL> connect / as sysdba
    Connecté.
    SQL> grant select_catalog_role to hr;
     
    Autorisation de privilèges (GRANT) acceptée.
     
    SQL>
    SQL> connect hr/hr
    Connecté.
    SQL> select * from v$version;
     
    BANNER
    ----------------------------------------------------------------
    Oracle Database 10g Express Edition Release 10.2.0.1.0 - Product
    PL/SQL Release 10.2.0.1.0 - Production
    CORE    10.2.0.1.0      Production
    TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
    NLSRTL Version 10.2.0.1.0 - Production
     
    SQL> select count(*) from dba_segments;
     
      COUNT(*)
    ----------
          3556
     
    SQL>
    SQL> create or replace function cnt return number
      2  is
      3  v_cnt number;
      4  begin
      5  select count(*) into v_cnt from dba_segments;
      6  return v_cnt;
      7  end;
      8  /
     
    Fonction créée.
     
    SQL> show errors
    Pas d''erreur.
    SQL> select cnt from dual;
    select cnt from dual
           *
    ERREUR à la ligne 1 :
    ORA-00942: Table ou vue inexistante
    ORA-06512: à "HR.CNT", ligne 5
     
     
    SQL>
    SQL> connect / as sysdba
    Connecté.
    SQL> grant select on dba_segments to hr;
     
    Autorisation de privilèges (GRANT) acceptée.
     
    SQL>
    SQL>
    SQL> connect hr/hr
    Connecté.
    SQL> select cnt from dual;
     
           CNT
    ----------
          3556
     
    SQL>

  4. #4
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut
    Etrange qu'on ait pas accès aux droits des rôles..

    Encore une bêtise qui m'a fait chercher pas mal de temps, merci beaucoup

  5. #5
    Membre éclairé
    Inscrit en
    Février 2008
    Messages
    457
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 457
    Par défaut
    Re bonjour,

    Petite question..

    Supposons que l'utilisateur A à les droits pour effectuer cette requête..
    Dans le schema de l'utilisateur B, on crée un package avec AUTH ID DEFINER..
    Donc les droits d'execution des fonctions sont définies par l'utilisateur qui a compiler le package..

    Si A crée une fonction dans ce package appartenant à B et le compile alors que B n'a pas les permissions nécessaires pour executer la requête contenue dans la fonction, est-ce que c'est possible malgré tout ?

    Je suppose que non mais bon

  6. #6
    Membre expérimenté
    Inscrit en
    Mars 2010
    Messages
    205
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 205
    Par défaut
    C'est pas possible qu'un utilisateur crée une fonction dans un package d'un autre utilisateur. Toutes les fonctions et procédures d'un package appartiennent obligatoirement au même schéma.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Python 3.X] Connection en python correcte, mais navigation dans le site impossible
    Par dva2tlse dans le forum Réseau/Web
    Réponses: 0
    Dernier message: 04/01/2015, 17h11
  2. Accent correct dans le batch mais non dans le output txt
    Par Invité dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 14/05/2012, 17h02
  3. Requete SQL BETWEEN fonctionne dans le bash mais pas dans mon script?
    Par ssc37 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 09/03/2009, 11h01
  4. [MySQL] Requete SQL correcte Mais aucun affichage
    Par jenga dans le forum PHP & Base de données
    Réponses: 21
    Dernier message: 10/04/2006, 13h55
  5. [PL/SQL] requete qui marche mais pas dans un cursor
    Par victor.ward dans le forum Langage SQL
    Réponses: 3
    Dernier message: 09/09/2005, 22h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo