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 :

Script de création dynamique d'un utilisateur


Sujet :

PL/SQL Oracle

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 205
    Points : 78
    Points
    78
    Par défaut Script de création dynamique d'un utilisateur
    Bonjour chers tous,

    J'aimerais écrire un script de création dynamique d'utilisation. A la suite de la création de l'utilisateur, je dois créer des tables propres à l'utilisateur créé. Malheureusement, je n'arrive pas à créer mon utilisateur depuis une fonction.

    voici le 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
    18
    19
    20
     
    CREATE OR REPLACE FUNCTION create_agence(nouveau_schema in varchar2)
    RETURN varchar2 IS
     sch varchar2(255) :='C##' || nouveau_schema ;
     nbrLines number := 0;
     
    BEGIN
        SELECT count(*) INTO nbrLines FROM dba_users WHERE username = sch;
     
        IF  nbrLines = 0  THEN
          ---------- Création du Schema ---------- 
          EXECUTE immediate 'create user '|| sch ||' identified by *******';
          EXECUTE immediate 'grant create session, connect, resource to  '||sch;
          COMMIT;
     
          RETURN 'ok';
        END IF;
     
        RETURN 'nok';
      END;
    Quand je compile le script, je recois un message d'erreur qui est

    Erreur(7,5): PL/SQL: SQL Statement ignored
    Erreur(7,40): PL/SQL: ORA-00942: Table ou vue inexistante
    J'ai essayé d'utiliser
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     EXECUTE IMMEDIATE 'SELECT username  FROM dba_users WHERE username = '||sch||'' INTO nbrLines;
    mais j'ai toujours les même code d'erreur. Je me suis essayé avec l'utilisation de curseur sans y arriver.

    J'aimerais avoir votre aide pour résoudre ce première problème en vue de poursuivre l'écriture de mon script.

    Merci d'avance de votre aide

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Le user a-t-il les droits sur DBA_USERS ?
    Par ailleurs pour utiliser des tables / vues en PL/SQL, les droits doivent être donnés en direct et non via un rôle.

    Pour ce qui est du code, il n'est généralement pas intéressant de tester une existence avant de faire ou de ne pas faire...
    Faîtes directement et traiter l'exception remontée... du coup plus besoin de tester DBA_USERS.

    Dernier point une procédure me semble plus appropriée pour ce genre de besoin qu'une fonction, de plus le commit est inutile pour valider une commande DDL car la commande est automatiquement encapsulée entre 2 commit.

  3. #3
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Return 'OK' et return 'KO' c'est de la programmation de la grande mère avant que les exceptions arrivent.
    Ce n'est pas une bonne pratique de créer des procédures pour cela, d'habitude un script est employé. Ci dessous un exemple d'un script de création d'un user en vue de l'installation du PL/SQL Logger pour vous faire une meilleure idée de ce que vous avez besoin comme information.
    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
     
    Rem    NAME
    Rem      create_user.sql
    Rem
    Rem    DESCRIPTION
    Rem      Use this file to create a user / schema in which to install the logger packages
    Rem
    Rem    NOTES
    Rem      Assumes the SYS / SYSTEM user is connected.
    Rem
    Rem    REQUIREMENTS
    Rem      - Oracle 10.2+
    Rem
    Rem
    Rem    MODIFIED   (MM/DD/YYYY)
    Rem       tmuth    11/02/2006 - Created
     
    set define '&'
     
    set verify off
    prompt
    prompt
    prompt Logger create schema script.
    prompt You will be prompted for a username, tablespace, temporary tablespace and password.
    prompt
     
     
    define LOGGER_USER=LOGGER
    accept LOGGER_USER char default &LOGGER_USER prompt 'Name of the new logger schema to create       [&LOGGER_USER] :'
     
    define LOGGER_TABLESPACE=USERS
    accept LOGGER_TABLESPACE char default &LOGGER_TABLESPACE prompt 'Tablespace for the new logger schema           [&LOGGER_TABLESPACE] :'
     
    define TEMP_TABLESPACE=TEMP
    accept TEMP_TABLESPACE char default &TEMP_TABLESPACE prompt 'Temporary Tablespace for the new logger schema  [&TEMP_TABLESPACE] :'
     
    accept PASSWD CHAR prompt 'Enter a password for the logger schema              [] :' HIDE
     
    create user &LOGGER_USER identified by &PASSWD default tablespace &LOGGER_TABLESPACE temporary tablespace &TEMP_TABLESPACE
    /
     
    alter user &LOGGER_USER quota unlimited on &LOGGER_TABLESPACE 
    /
     
    grant connect,create view, create job, create table, create sequence, create trigger, create procedure, create any context to &LOGGER_USER 
    /
     
    prompt
    prompt
    prompt &LOGGER_USER user successfully created.
    prompt Important!!! Connect as the &LOGGER_USER user and run the logger_install.sql script.
    prompt
    prompt
     
    exit

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 205
    Points : 78
    Points
    78
    Par défaut
    Merci dejà de l'aide,

    skuatamad, je confirma que le user a les droits de création des Users. Je crée les utilisateur depuis pl/sql directement à partir de scripts en précisant le non de l'utilisateur.

    Seulement, je veux rendre dynamique la création de l'utilisateur en appelant ma fonction. Dans e cadre de mon projet, on doit pouvoir créer dynamiquement un utilisateur et ses tables à la suite d'un éventement déclencheur (Il faut créer l'utilisateur s'il n'existe pas) d'où la vérification de l’existence.

    Pour ce qui est du code, il n'est généralement pas intéressant de tester une existence avant de faire ou de ne pas faire...
    Faîtes directement et traiter l'exception remontée...
    Comment intercepter l'exception au cas où le signataire existait déjà?


    mnitu, où créer ce script et comment l'appeler pour l'exécution? A vrai dire, j'arrive pas à interpréter le script...

    Merci

  5. #5
    Expert éminent sénior Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par aldama Voir le message
    ...skuatamad, je confirma que le user a les droits de création des Users. Je crée les utilisateur depuis pl/sql directement à partir de scripts en précisant le non de l'utilisateur.
    ...
    Je vous confirme que vous n'avez pas les droits de sélectionner à partir de la vue dba_users qu'en sql parce que vous avez reçu ces droits via un role qui ne s'applique pas en PL/SQL.

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    205
    Détails du profil
    Informations personnelles :
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 205
    Points : 78
    Points
    78
    Par défaut
    ok, merci

    Je vais chercher à avoir les droits et poursuivre.

    Je vous eviendrai

Discussions similaires

  1. Script de création utilisateur sous active directory
    Par soufiane2102 dans le forum VBScript
    Réponses: 0
    Dernier message: 14/06/2012, 16h45
  2. script création d'un nouvel utilisateur
    Par zimamouche1 dans le forum Administration
    Réponses: 3
    Dernier message: 21/01/2012, 22h20
  3. script de création de table dynamique
    Par Etienne5685 dans le forum Développement
    Réponses: 2
    Dernier message: 07/09/2011, 14h38
  4. Réponses: 4
    Dernier message: 05/02/2009, 14h16
  5. Réponses: 3
    Dernier message: 08/02/2008, 15h02

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