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 :

Procédure & insert / select dans un autre schéma


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut Procédure & insert / select dans un autre schéma
    Bonjour,

    Je viens de perdre pas mal de temps pour réussir à insérer des données dans un schéma autre que le schéma de l'user courrant via une procédure.

    J'ai "contourner" le problème en indiquant des droits explicite (et non via role) à l'utilisateur.

    Je me demandais s'il n'y avait pas un autre moyen que ceci ?

    Je trouve ca assez lourd comme contrainte au vu de la gestion des rôles.

    edit: oracle 11gr2

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Pour les procédures stockées il faut avoir les droits en direct et non via un rôle.

    Les rôles seront utiles pour des users se connectant en direct ou pour des users applicatifs avec des droits execute sur certains packages, mais pas pour les users générant l'API, mais j'avoue c'est un peu naze...

  3. #3
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Merci pour les précisions.

    Citation Envoyé par skuatamad Voir le message
    des droits execute sur certains packages
    Pourrai-tu développer ce point là ?

    Mon contexte est le suivant :
    J'ai un package qui dispose de X procedure / fonction afin de réaliser une migration de donnée.

    ce package n'est appelable que via une procédure public et tout le reste ce fait avec des fonctions / procédures privées.

    Je n'ai pas d'autre choix que de donner les droits select / insert à l'utilisateur qui va appeler ma procédure public sur les tables du schéma de destination donc ?

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Citation Envoyé par punkoff Voir le message
    Je n'ai pas d'autre choix que de donner les droits select / insert à l'utilisateur qui va appeler ma procédure public sur les tables du schéma de destination donc ?
    Non justement c'est bon, seul le user qui crée le package a besoin des droits directs, les autres, il leur suffit d'avoir le droit execute sur le package donné directement ou indirectement via PUBLIC.

    Ci-dessous un exemple j'espère qu'il est clair :
    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
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    SQL> create user a identified by a;
     
    User created.
     
    SQL> grant create session,create table to a;
     
    Grant succeeded.
     
    SQL> ALTER user a quota unlimited ON users;
     
    User altered.
     
    SQL> disconnect
     
    SQL> conn a/a
    Connected.
    SQL> create table test as select * from all_users where username='A';
     
    Table created.
     
    SQL> select * from test;
     
    USERNAME                          USER_ID CREATED
    ------------------------------ ---------- ---------
    A                                     101 27-APR-11
     
    SQL> exit
     
    [...]$ sqlplus /
     
    SQL> create user b identified by b;
     
    User created.
     
    SQL> grant connect,resource to b;
     
    Grant succeeded.
     
    SQL> grant select,insert,update,delete on a.test to b;
     
    Grant succeeded.
     
    SQL> disconnect 
     
    SQL> conn b/b
    Connected.
    SQL> create or replace package b_pkg as
      procedure p_pub;
    end;
    /  2    3    4  
     
    Package created.
     
    SQL> create or replace package body b_pkg as
      procedure p_priv as
      begin
        delete a.test;
        insert into a.test select * from all_users where username='B';
        commit;
      end p_priv;
     
      procedure p_pub as
      begin
        p_priv;
      end p_pub;
    end;
    /  2    3    4    5    6    7    8    9   10   11   12   13   14  
     
    Package body created.
     
    SQL> grant execute on b_pkg to public;
     
    Grant succeeded.
     
    SQL> exit
     
    [...]$ sqlplus /
     
    SQL> create user c identified by c;
     
    User created.
     
    SQL> grant connect to c;
     
    Grant succeeded.
     
    SQL> disconnect
     
    SQL> conn c/c
    Connected.
    SQL> exec b.b_pkg.p_pub;
     
    PL/SQL procedure successfully completed.
     
    SQL> select * from a.test;
    select * from a.test
                    *
    ERROR at line 1:
    ORA-00942: table or view does not exist
     
    SQL> disconnect
     
    SQL> conn a/a
    Connected.
    SQL> select * from test;
     
    USERNAME                          USER_ID CREATED
    ------------------------------ ---------- ---------
    B                                     102 27-APR-11
     
    SQL>

    [edit]Au fait j'avais mal lu, les droits ne sont pas donnés à PUBLIC mais seule la procédure est publique, donc avec les droits execute donnés directement au user c:
    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
    SQL> revoke execute on b.b_pkg from public;
     
    Revoke succeeded.
     
    SQL> grant execute on b.b_pkg to c;
     
    Grant succeeded.
     
    SQL> disconnect
    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    SQL> conn c/c
    Connected.
    SQL> exec b.b_pkg.p_pub;
     
    PL/SQL procedure successfully completed.
     
    SQL>
    Et pour l'execution les rôles fonctionnent :
    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
    SQL> create role exec_pkg;
     
    Role created.
     
    SQL> grant execute on b.b_pkg to exec_pkg;
     
    Grant succeeded.
     
    SQL> revoke execute on b.b_pkg from c;
     
    Revoke succeeded.
     
    SQL> grant exec_pkg to c;
     
    Grant succeeded.
     
    SQL> disconnect
    Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
    SQL> conn c/c
    Connected.
    SQL> exec b.b_pkg.p_pub;
     
    PL/SQL procedure successfully completed.
     
    SQL>

  5. #5
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Par défaut
    Ok compris.

    Merci pour la démo

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

Discussions similaires

  1. Insertion schéma visio dans un autre schéma
    Par kenfy dans le forum Visio
    Réponses: 3
    Dernier message: 23/09/2008, 15h46
  2. Ma procédure n'insert rien dans ma table
    Par bennbenn dans le forum Oracle
    Réponses: 5
    Dernier message: 05/10/2006, 17h53
  3. [9i]Copie de table dans un autre schéma.
    Par sali dans le forum Oracle
    Réponses: 5
    Dernier message: 10/02/2006, 07h52
  4. récupérer la valeur d'un select dans un autre
    Par alexander dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 16/03/2005, 19h43
  5. [TP]Insertion texte dans un autre programme
    Par FLB dans le forum Turbo Pascal
    Réponses: 53
    Dernier message: 14/06/2003, 20h11

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