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

SQL Oracle Discussion :

[PLSQL] création d'un utilisateur


Sujet :

SQL Oracle

  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut [PLSQL] création d'un utilisateur
    Bonjour à tous,

    Dans le cadre de mon projet, je dois réaliser un bloc plsql dans lequel je crée un nouvel utilisateur.

    Malheureusement mon sql+ me sort une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE USER OPS$BIBO IDENTIFIED BY boub temporary tablespace temp default tablespace users;
           *
    ERROR at line 52:
    ORA-06550: line 52, column 1:
    PLS-00103: Encountered the symbol "CREATE" when expecting one of the following:
    begin case declare end exception exit for goto if loop mod
    null pragma raise return select update while with
    <an identifier> <a double-quoted delimited-identifier>
    <a bind variable> << close current delete fetch lock insert
    open rollback savepoint set sql execute commit forall merge
    <a single-quoted SQL string> pipe
    Je n'arrive pas à comprendre! La structure de mon bloc est bonne puisque lorsque je mets cette instruction et celles qui en dépendent en commentaire, je n'ai plus d'erreurs.

    pouvez vous éclairer ma lanterne, parce que là je sèche totalement!!

    Merci d'avance

    je tourne avec :
    ORACLE SQL+ version 9.2.0.7.0
    ORACLE version 9.2

  2. #2
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    1. Donnez le code que vous essayez
    2. Pourquoi passer par du PL/SQL alors que c'est du SQL tout simplement ?
    3. Etes-vous sûr que votre user OPS$BIBO n'est pas "IDENTIFIED EXTERNALLY" plutôt que "IDENTIFIED BY" ?

  3. #3
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut ,

    remplace ta ligne par le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    execute immediate 'CREATE USER OPS$BIBO IDENTIFIED BY 
    boub TEMPORARY tablespace temp DEFAULT tablespace' ;

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    Merci Salim11!
    Si je comprend bien il faut mettre execute immediate avant de faire une instruction sql? on doit aussi le mettre devant des select ou insert?

    Por réponse à vos questions, LeoAnderson, l'utilisation du plsql m'est obligatoire puisque j'ai besoin de réaliser des traitements préalables à la création de l'utilisateur : quels sont les droits qu'il faut lui attribuer, etc...

    Cependant, je bute sur un nouveau problème :
    j'ai un ensemble de variable (role1, role2, role3, etc) qui se sont vu attribué des chaines de caractères correspondantes aux rôles que l'on veut attribuer à l'utilisateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Declare
    role1 varchar2(250);
    --idem role2, role3, etc...
    roles_fin varchar2(1000);
    /*
    ....
    */
     
    begin
    --affectation des différents variables role1, role2, etc...
     
    roles_fin := '&defaultroles' || role1 || role2 || role3 || role4 || role5 || role6 ||role7 || role8 || role9 || role10;
    execute immediate 'GRANT || roles_fin || to &ops_id';
    L'affectation des différents rôles dans la variable roles_fin marche bien.
    Mon problème est que je ne sais pas comment faire pour que le "roles_fin" du GRANT soit pris en tant que variable. Je sais que cette synthaxe est mauvaise mais je n'arrive pas à en trouver une autre.

    Auriez vous une idée?

    Merci d'avance

  5. #5
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    Pour mon problème de variable dans le grant, j'ai trouvé ;

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    roles_fin := 'droit1,droit2,droit3,droit4,droit5,droit6';
    execute immediate 'GRANT "'|| roles_fin ||'" to &ops_id';
    La taille de roles_fin va de 58 à 504 au maximum en fonction des traitements préalables.
    Le problème est que maintenant sql+ me sort l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ORA-00972: identifier is too long
    ORA-06512: at line 77
    La ligne 77 correspond justement à mon grant avec une variable roles_fin de taille 58. Je sais que l'erreur ORA-00972 correspond à un identifiant trop long et qu'il ne doit pas dépasser 30 caractères.

    D'où ma question : est ce que l'identifiant (dans le grant) est le role (ou ensemble de roles) que l'on veut affecter à l'utilisateur ou l'utilisateur lui même?

    merci d'avance de vos réponses!!!

  6. #6
    Rédacteur

    Homme Profil pro
    Développeur et DBA Oracle
    Inscrit en
    Octobre 2006
    Messages
    878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur et DBA Oracle

    Informations forums :
    Inscription : Octobre 2006
    Messages : 878
    Par défaut
    Salut,

    On peut pas mette une instruction create dans un block plsql, alors on a besoin de l'executer avec execute immediate.

    Remplace ta ligne par la ligne suivante, je l'ai executé et ça marche bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    execute immediate 'GRANT '|| roles_fin  ||' to &ops_id';

  7. #7
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    Merci Salim11
    Ca roule comme sur des roulettes!!!

  8. #8
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Je répète : ce qui peut être fait en SQL ne doit pas être fait en PL/SQL.
    Sauf à ce que cette procédure soit destinée à être appellée depuis des programmes autres, je préfère le faire en SQL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    prompt Entrez le nom de l'utilisateur
    accept UTILISATEUR
    create user &UTILISATEUR identified by &UTILISATEUR;
    ...

  9. #9
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    Je comprend ton raisonnement et je suis d'ailleurs d'accord avec toi;
    dans mon cas, j'ai plusieurs contraintes :
    1. demander les informations au dba concernant l'utilisateur à créer.
    2. en fonction des ses réponses (traitements par "if ... then .... end if;") l'utilisateur se voit attribuer des droits qui seront différents d'un utilisateur à un autre
    3. permettre au dba de créer autant d'utilisateur qu'il le désire, sans qu'il se tape à relancer le script : mettre le traitement et la demande d'information dans une boucle

    Toutes ces raisons, je suis obligé d'utiliser du plsql et d'appeler du sql dedans; Si tu connais un autre moyen, n'hésite pas à me le communiquer!!

    D'ailleurs je bloque sur un point de mon raisonnement : la demande d'informations au DBA; Actuellement mon code est le suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ACCEPT ident prompt "login utilsiteur : "
    ACCEPT pwd prompt "mot de passe : "
    Declare
    ....
    Begin
    ....
    END
    Or je n'arrive pas à mettre ce code dans le bloc plsql (dans le "begin") afin que la séquence de demande d'information puisse être répétée à chaque tour de boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    DECLARE
    ident varchar2(250):=null;
    pwd  varchar2(250):=null;
    BEGIN
    execute immediate 'ACCEPT ident prompt "login utilsiteur : "';
    execute immediate 'ACCEPT pwd prompt "mot de passe : "';
    ...
    END
    Merci de vos réponses

  10. #10
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    perso, je ferais toute la partie boucle et interaction avec la personne en ksh + appel de SQL*Plus avec passage de paramètres

  11. #11
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    Merci de ta réponse mais..... qu'est ce que ksh??
    C'est un langage unix, non??
    mon script ne tournera quand à lui que sous Windows.

  12. #12
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Mars 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2007
    Messages : 21
    Par défaut
    Au final, j'ai laissé tomber la boucle
    Merci pour vos contributions

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

Discussions similaires

  1. Création des comptes utilisateurs a partir d'un script et fichier texte
    Par hocine1978 dans le forum Administration système
    Réponses: 2
    Dernier message: 26/12/2006, 14h11
  2. probleme lors de la création d'un utilisateur sur un poste client.
    Par passion_info dans le forum Windows Serveur
    Réponses: 5
    Dernier message: 29/11/2006, 11h13
  3. Création d'interfaces utilisateurs
    Par vingrid6 dans le forum Access
    Réponses: 1
    Dernier message: 24/05/2006, 15h53
  4. []Création automatique d'utilisateurs
    Par SaeZ dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 27/10/2005, 13h38
  5. création de comptes utilisateur
    Par junty dans le forum Access
    Réponses: 10
    Dernier message: 17/10/2005, 09h35

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