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

PL/SQL Oracle Discussion :

Droits / permissions d'exécution de UTL_FILE


Sujet :

PL/SQL Oracle

  1. #1
    Candidat au Club
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 3
    Points
    3
    Par défaut Droits / permissions d'exécution de UTL_FILE
    Bonjour,

    j'ai besoin de faire un trigger sur une table lors du "DELETE", j'ai donc écrit :

    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
    create or replace trigger trg_del_APMFCQ
    before delete on APMFCQ
    for each row
    when ( old.CODDTQ = 'XVT')
     
    declare
            ID_FILE             UTL_FILE.FILE_TYPE;
            MODE_OPEN           CHAR(1) := 'A';
    begin
    ID_FILE := UTL_FILE.FOPEN('ora_log2','trg_del_APMFCQ.log',MODE_OPEN);
    UTL_FILE.PUT_LINE(ID_FILE, :old.CODDTQ || ' ' || :old.DATCRE || ' ' || :old.HEUCRE || ' ' || :old.VARDTQ);
    UTL_FILE.FCLOSE(ID_FILE);
     
    end ;
    /
    Mon rapport d'erreur est le suivant :

    create or replace trigger trg_del_APMFCQ
    before delete on APMFCQ
    for each row
    when ( old.CODDTQ = 'XVT')

    declare
    ID_FILE UTL_FILE.FILE_TYPE
    Rapport d'erreur -
    ORA-00990: privilège absent ou non valide
    00990. 00000 - "missing or invalid privilege"
    *Cause:
    *Action:
    Je précise que le directory Oracle (ORA_LOG2) est bien créé et existe dans ALL_DIRECTORY.

    j'ai également fait un "GRANT EXECUTE any procedure" sur mon user ...

    Je ne sais plus quoi faire

  2. #2
    Membre confirmé
    Homme Profil pro
    xxxxxxxxx
    Inscrit en
    Avril 2015
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : xxxxxxxxx

    Informations forums :
    Inscription : Avril 2015
    Messages : 392
    Points : 552
    Points
    552
    Par défaut
    Est-ce que tu peux le directory en majuscule et puis faire le grant directement sur le package UTL_FILE .

  3. #3
    Candidat au Club
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    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
    SQL> create or replace directory ORA_LOG4 as '/softwares/tmpfb';
     
    Directory created.
     
    SQL> grant read,write on directory ORA_LOG4 to FGE50P087;
     
    Grant succeeded.
     
    SQL> 
    SQL> grant execute on UTL_FILE to FGE50P087;
     
    Grant succeeded.
     
     
    SELECT * FROM ALL_DIRECTORIES;
     
    SYS	ORA_LOG4	/softwares/tmpfb	0
    résultat :

    create or replace trigger trg_del_APMFCQ
    before delete on APMFCQ
    for each row
    when ( old.CODDTQ = 'XVT')

    declare
    ID_FILE UTL_FILE.FILE_TYPE
    Rapport d'erreur -
    ORA-00990: privilège absent ou non valide
    00990. 00000 - "missing or invalid privilege"
    *Cause:
    *Action:
    j'ai l'impression que mon user ne peut pas accéder au package UTL_FILE .. ??

    j'ai essayé de faire un execute du UTLFILE.sql dans /$ORACLE_HOME/ora19c/rdbms/admin :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SQL>  @/softwares/app/ora19c/rdbms/admin/utlfile.sql
    ERROR:
    ORA-02097: parameter cannot be modified because specified value is invalid
    ORA-01031: insufficient privileges

    Package created.

    Grant succeeded.

    Synonym created.

    ERROR:
    ORA-02097: parameter cannot be modified because specified value is invalid
    ORA-01031: insufficient privileges

  4. #4
    Membre confirmé
    Homme Profil pro
    xxxxxxxxx
    Inscrit en
    Avril 2015
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : xxxxxxxxx

    Informations forums :
    Inscription : Avril 2015
    Messages : 392
    Points : 552
    Points
    552
    Par défaut
    Et si tu interrogeais la vue dba_tab_privs pour voir les privilèges de UTL_FILE ?

  5. #5
    Membre confirmé
    Homme Profil pro
    xxxxxxxxx
    Inscrit en
    Avril 2015
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : xxxxxxxxx

    Informations forums :
    Inscription : Avril 2015
    Messages : 392
    Points : 552
    Points
    552
    Par défaut
    J'ai oublié de t'indiquer si tu changeais la commande grant sur SYS.UTL_FILE

  6. #6
    Candidat au Club
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    J'ai fait le Grant sur SYS.UTL_FILE => pareil

    le résultat sur dba_tab_privs where table_name = 'UTL_FILE' :
    PUBLIC SYS UTL_FILE SYS EXECUTE NO NO NO PACKAGE NO
    ORACLE_OCM SYS UTL_FILE SYS EXECUTE NO NO NO PACKAGE NO
    WMSYS SYS UTL_FILE SYS EXECUTE NO NO NO PACKAGE NO
    FGE50P087 SYS UTL_FILE SYS EXECUTE NO NO NO PACKAGE NO
    PUBLIC FGE50P087 UTL_FILE FGE50P087 EXECUTE NO NO NO PACKAGE NO

  7. #7
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Bonjour,

    Cette erreur signifie qu'un grant ou un revoke de privilège échoue, probablement à cause d'une erreur de syntaxe ou d'un privilège qui n'existe pas.

    Pour débuguer, fais la chose suivante avec la création de ton trigger:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    alter session set events '990 trace name errorstack level 3';
    alter session set events '10046 trace name context forever,level 12';
     
    create trigger ...

    Une trace a dû être créée sur le serveur. Fais "show parameter diag" dans sql*plus pour savoir dans quel répertoire.
    Cherche une trace créée à l'heure de ton plantage, et poste le résultat ici.

  8. #8
    Candidat au Club
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    pour tester j'ai compilé le trigger sur SQL*PLUS :
    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
     
    SQL> create or replace trigger trg_del_APMFCQ
      2  before delete on APMFCQ
      3  for each row
      4  when ( old.CODDTQ = 'XVT')
      5   
      6  declare
      7          ID_FILE             UTL_FILE.FILE_TYPE;
      8          MODE_OPEN           CHAR(1) := 'A';
      9  begin
     10  ID_FILE := UTL_FILE.FOPEN('ORA_LOG4','trg_del_APMFCQ.log',MODE_OPEN);
     11  UTL_FILE.PUT_LINE(ID_FILE, :old.CODDTQ || ' ' || :old.DATCRE || ' ' || :old.HEUCRE || ' ' || :old.VARDTQ);
     12  UTL_FILE.FCLOSE(ID_FILE);
     13   
     14  end ;
     15  /
     
    Trigger created.
     
    SQL>
    mais à l'exécution du trigger :

    ERROR at line 1:
    ORA-04067: not executed, package body "FGE50P087.UTL_FILE" does not exist
    ORA-06508: PL/SQL: could not find program unit being called:
    "FGE50P087.UTL_FILE"
    ORA-06512: at "FGE50P087.TRG_DEL_APMFCQ", line 5
    ORA-04088: error during execution of trigger 'FGE50P087.TRG_DEL_APMFCQ'

  9. #9
    Membre chevronné
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 138
    Points : 1 918
    Points
    1 918
    Par défaut
    Il doit y avoir une merde dans tes privilèges.
    Bon, au pire tu peux préfixer par sys.

    sys.utl_file

  10. #10
    Candidat au Club
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    Effectivement en mettant SYS.UTL_FILE ça fonctionne

    merci beaucoup

  11. #11
    Membre confirmé
    Homme Profil pro
    xxxxxxxxx
    Inscrit en
    Avril 2015
    Messages
    392
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : xxxxxxxxx

    Informations forums :
    Inscription : Avril 2015
    Messages : 392
    Points : 552
    Points
    552
    Par défaut
    Voilà je te propose un feedback :

    D'après tous ce que tu as fait :
    refait le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     grant execute on utl_file to public ;
    1ère solution : en requêtant sur la vue dba_tab_privs avec cette requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      select grantee, grantor, privilege, owner, table_name from dba_tab_privs
                     where table_name='UTL_FILE' and grantee in ('FGE50P087','PUBLIC') ;
    tu devrais avoir comme résultat :
    GRANTEE GRANTOR PRIVILEGE OWNER TABLE_NAME
    PUBLIC SYS EXECUTE SYS UTL_FILE

    recréer ton trigger comme avant ..

    2ième solution : J'ai vue que tu as essayé de créer le pkg UTL_FILE et pkg body UTL_FILE avec le script
    utlfile.sql sous l'utilisateur FGE50P087 et ça n'a pas aboutit, alors tu peux réssayer en
    modifiant les deux scripts (dans sqlsessstart.sql et sqlsessend.sql càd mettre les instructions alter session ..
    en commentaire ..) dans utlfile.sql
    et rééxécute ce script pour recréer UTL_FILE !
    a l'issue de la création du PKG UTL_FILE , recréer ton trigger ..

    Good Luck !

  12. #12
    Candidat au Club
    Homme Profil pro
    chef de projet technique
    Inscrit en
    Avril 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : chef de projet technique

    Informations forums :
    Inscription : Avril 2009
    Messages : 15
    Points : 3
    Points
    3
    Par défaut
    La première solution est ok, j'ai testé sur un autre user pour ne pas avoir d'interférence

    j'ai repris ce code :
    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
     
    create or replace trigger trg2_del_APMFCQ
        before delete on APMFCQ
        for each row
        when ( old.CODDTQ = 'XVT')
        declare
                WVARDTQ             char(150) := substr(:old.VARDTQ,1,150);
                ID_FILE             UTL_FILE.FILE_TYPE;
                MODE_OPEN           CHAR(1) := 'A';
        begin
       ID_FILE := UTL_FILE.FOPEN('ORA_LOG2','trg2_del_APMFCQ.log',MODE_OPEN);
       UTL_FILE.PUT_LINE(ID_FILE, :old.CODDTQ || ' ' || :old.DATCRE || ' ' || :old.HEUCRE || ' ' || WVARDTQ);
       UTL_FILE.FCLOSE(ID_FILE);
       end ;
       /
     
    ça fonctionne  merci :D

Discussions similaires

  1. Permission d'exécution sur une job
    Par DEV-10 dans le forum Outils
    Réponses: 6
    Dernier message: 18/08/2009, 16h23
  2. [JpGraph] Problème droit permission d'écriture
    Par boniface dans le forum Bibliothèques et frameworks
    Réponses: 3
    Dernier message: 22/03/2007, 14h34
  3. Problème de droit : permission non accordée
    Par shadowman69 dans le forum Administration système
    Réponses: 1
    Dernier message: 02/06/2006, 14h58
  4. SQL Server comprendre roles, logins, schemas, droits, permissions
    Par nokiariver dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 02/06/2006, 08h07
  5. click-droit sur un exécutable
    Par jakouz dans le forum Langage
    Réponses: 3
    Dernier message: 27/09/2005, 14h49

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