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 :

limiter le nombre de connexion VB-Oracle


Sujet :

Oracle

  1. #1
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut limiter le nombre de connexion VB-Oracle
    J'ai une application VB6-oracle8i et un user ne doit pouvoir se connecter qu'une fois à la base via l'appli VB.

    Comment puis-je limiter le nombre de connexion (v$Session n'étant pas accessible via vb)?

    En gros ce que j'aimerais faire, c'est :
    - à la connexion verif que le user n'est pas dejà connecté.
    - si non ça passe
    - si oui, petit message et bye.

    (c'est le 1er point qui m'embete )

  2. #2
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Bonjour ,
    Un trigger sur la connexion pourrait vous aider

  3. #3
    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
    Points : 3 199
    Points
    3 199
    Par défaut
    Au niveau du profil, on peutr également définir le nombre max de sessions simultanées ! ;-)

  4. #4
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Les 2 solutions me plaisent bien.

    Mais la 1ère (trigger) je ne vois pas bien comment la mettre en place.

    Vous pouvez m'éclairer ?

  5. #5
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Le code n'est pas tout à fait vérifié , sinon je le testerai tout à l'heure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    create or replace trigger interdire_connexion after  logon on database     
    declare      
    v_isdba number;
    begin     
    execute immediate   
    'select count (username)from v$session where username = ( select distinct (username) from v$session where sid = (select distinct sid from sys.v_$mystat )) ' into v_isdba ;  
    if   v_isdba = '1'
    then       
    RAISE_APPLICATION_ERROR (-20001,'Ily a déja une connexion avec cet user ',TRUE);   
    end  if;     
    end;    
    /
    Par contre ce dont je suis sûr , c'est que cette solution sera "inutile" face
    aux utilisateurs ayant le privilége :"ADMINISTER DATABASE TRIGGER"

    De plus ce privilége peut parfois être inclut dans des doles de types DBA ou même IMP_FULL_DATABASE

  6. #6
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Il est également conseillé de créer le trigger sous le compte SYS .

  7. #7
    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
    Points : 3 199
    Points
    3 199
    Par défaut
    Pourquoi donc vouloir réinventer la roue ???

    http://download-west.oracle.com/docs...users.htm#1176
    CREATE PROFILE clerk
    LIMIT SESSIONS_PER_USER 1
    CPU_PER_SESSION unlimited
    CPU_PER_CALL 6000
    LOGICAL_READS_PER_SESSION unlimited
    LOGICAL_READS_PER_CALL 100
    IDLE_TIME 30
    CONNECT_TIME 480;
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE USER jfee
        IDENTIFIED BY wildcat
        DEFAULT TABLESPACE users
        TEMPORARY TABLESPACE temp_ts
        QUOTA 500K ON users
        PROFILE clerk;
    [EDIT]
    Sans compter que je préfèrerai quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    BEGIN
       SELECT Terminal, OSUser
         INTO lc$Term, lc$OSUser
         FROM V$Session
        WHERE UserName = User
           AND SID <> UserEnv('SESSIONID')
           AND ROWNUM = 1;
       RAISE_APPLICATION_ERROR ('Déjà connecté depuis '||lc$Term||' avec le compte systeme '||lc$OSUser);
    EXCEPTION
        WHEN NO_DATA_FOUND THEN NULL;
    END;
    Non testé également :-(

    [/EDIT]

    [EDIT2]

    Au passage, je remarque que tu fais un select sur sys.v_$mystat !
    En général, il vaut mieux éviter d'attaquer directement les vues et passer par les synonymes. En effet, si dans le futur, pour une raison x ou y on ne souhaite pas que les utilisateurs aient accès à tout, on sera coincés et on devra tout réécrire.
    Si dès le départ, on ,n'utilise pas sys.v_$... mais v$... il suffit de créer un synonyme privé et tout le filtrage/modifications deviennent complètement transparents aux utilisateurs, procédures et programmes ! ;-)
    [/EDIT2]

  8. #8
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    Merci pour tout.

    Limiter au niveau profil me plait bien.
    En effet je veux que les utilisateurs soient limités mais moi, je veux pouvoir avoir plusieurs connexions (une PL Sql et une VB par ex).

  9. #9
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    Citation Envoyé par LeoAnderson
    Pourquoi donc vouloir réinventer la roue ???
    Ici il s'agit de montrer une solution alternative qui peut être évolutive , car cette solution permet d'interdire un ou plusieurs outils , ou même comme le souhaite Lonestar , d'avoir une connexion VB , une connexion Toad , une conexion par user et par poste ... etc



    n'es tu pas de cette avis léo ?

  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
    Points : 3 199
    Points
    3 199
    Par défaut
    Si, ça apporte une souplesse de plus, mais des contraintes et des risques supplémentaires d'erreurs (c'est typiquement ce qu'on oublie de prendre dans le cas d'une migration vu que ça appartient à SYS et que c'est automatique... )
    Si le besoin est simplement : une connection par compte utilisateur, alors on créé un profil ad-hoc ! ;-)

  11. #11
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    J'ajouterais que la limitation de session ne marche pas du tout.

    Et c'est étrange, dans dba studio, on voit bien que le profile est limité à 1 session/user et que le user est bien affecté au profil.
    Mais je peux quand même me connecter autant de fois que je veux.

    Remarque : Les connexions sont effectuées à l'entrée dans l'appli (normal) et apparaissent dans oracle à l'état inactives. c'est p'etre ca ??

    , bon bah je passe au trigger alors.

  12. #12
    Rédacteur

    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    2 320
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 2 320
    Points : 3 798
    Points
    3 798
    Par défaut
    voila pourquoi cela ne marche pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    SQL> show parameter resource_limit
     
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    resource_limit                       boolean     FALSE
    SQL> alter system set resource_limit= TRUE ;
     
    Système modifié.
     
    SQL> conn dvp/dvp
    ERROR:
    ORA-02391: exceeded simultaneous SESSIONS_PER_USER limit
    et pour boucler la boucle , changer ce paramétre en 8i :
    init.ora
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     resource_limit = true
    en 9i :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    alter system set  resource_limit = true scope =BOTH

  13. #13
    Candidat au Club
    Inscrit en
    Août 2005
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 5
    Points : 2
    Points
    2
    Par défaut
    C'est géant.
    Merci.

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

Discussions similaires

  1. [C3PO][Struts2] Limiter le nombre de connexions à la base ?
    Par Bobsinglar dans le forum Hibernate
    Réponses: 5
    Dernier message: 10/06/2008, 14h25
  2. [ASE]Comment limiter le nombre de connexion
    Par log2n dans le forum Adaptive Server Enterprise
    Réponses: 1
    Dernier message: 22/09/2007, 11h57
  3. [DB2] Limiter le nombre de connexion persistantes
    Par silver.spike dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/06/2007, 09h28
  4. mysql_pconnect() - limiter le nombre de connexions
    Par Lideln dans le forum Débuter
    Réponses: 10
    Dernier message: 08/11/2006, 13h34
  5. Limiter de nombre de connexions simultanées
    Par Drahu dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 08/09/2005, 11h43

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