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 :

fonction verifiant le mot de passe


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    18
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 18
    Par défaut fonction verifiant le mot de passe
    J'ai créer une fonction oracle la crée mais quand je m'en sert il ne la trouve pas.
    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
    SQL> create or replace FUNCTION verify_function
      2  (
      3     nom varchar2,
      4     pwd varchar2,
      5     old_pwd varchar2
      6  )
      7  RETURN boolean is
      8  m integer;
      9  isdigit boolean;
     10  ischar boolean;
     11  digitarray varchar2(20);
     12  chararray varchar2(52);
     13  BEGIN
     14  digitarray:='0123456789';
     15  chararray:='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
     16  --test si le nom est le meme que le mot de passe
     17  IF pwd = nom THEN
     18    raise_application_error(-20001,'pwd=user');
     19  END IF;
     20  --test si le mot de passe contient au moins 4 caractère
     21  IF length(pwd) < 4 THEN
     22    raise_application_error(-20002,'Mot de passe trop court');
     23  END IF;
     24  --test si le mot de passe est trop simple
     25  IF NLS_LOWER(pwd) like ('%tam%') THEN
     26    raise_application_error(-20002,'mot de passe trop simple');
     27  END IF;
     28  IF NLS_LOWER(pwd) like ('%cam%')THEN
     29    raise_application_error(-20002,'mot de passe trop simple');
     30  END IF;
     31  IF NLS_LOWER(pwd) IN ('tente','azer') THEN
     32    raise_application_error(-20002,'mot de passe trop simple');
     33  END IF;
     34  --test si le mot de passe contient un chiffre et une lettre
     35  isdigit:=FALSE;
     36  m := length(pwd);
     37  FOR i IN 1..10 LOOP
     38     FOR j IN 1..m LOOP
     39        IF substr(pwd,j,1) = substr(digitarray,i,1) THEN
     40     isdigit:=TRUE;
     41     GOTO findchar;
     42        END IF;
     43     END LOOP;
     44  END LOOP;
     45  IF isdigit = FALSE THEN
     46    raise_application_error(-20003,'le mot de passe doit contenir un chiffre'
    );
     47  END iF;
     48  <<findchar>>
     49  ischar:=FALSE;
     50  FOR i IN 1..length(chararray) LOOP
     51     FOR j IN 1..m LOOP
     52        IF substr(pwd,j,1) = substr(chararray,i,1) THEN
     53     ischar:= TRUE;
     54     GOTO endsearch;
     55        END IF;
     56     END LOOP;
     57  END LOOP;
     58  IF ischar = FALSE THEN
     59    raise_application_error(-20003,'le mot de passe doit avoir un chiffre');
     60  END IF;
     61  <<endsearch>>
     62  RETURN(TRUE);
     63  end;
     64  /
     
    Fonction crÚÚe.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    SQL> CREATE PROFILE Employes
      2  LIMIT
      3  SESSIONS_PER_USER 1
      4  CONNECT_TIME 240
      5  IDLE_TIME 15
      6  FAILED_LOGIN_ATTEMPTS 4
      7  PASSWORD_LIFE_TIME 45
      8  PASSWORD_LOCK_TIME UNLIMITED
      9  PASSWORD_VERIFY_FUNCTION verify_function;
    CREATE PROFILE Employes
    *
    ERREUR Ó la ligne 1 :
    ORA-07443: La fonction VERIFY_FUNCTION est introuvable

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    487
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 487
    Par défaut
    après avoir créer votre fonction, faites show errors pour verifier qu'elle est bien valide

  3. #3
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Bonjour,

    La fonction est bien créée dans le schéma SYS ?

    Cordialement
    Eric

  4. #4
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 226
    Par défaut meme probleme
    Voilà j'ai modifié aussi la fonction de oracle pour y appliquer mes propres restrictions. la compilation marc he sans erreur je l'ai bien mise dans le schéma sys mais il semble qu'il y ai un problème pour affecter la fonction de complexité a un profile. En effet j'ai une erreur me disant
    "ORA_28004 l'argument associé a la fonction que vous avez indiqué dans PASSWORD_VERIFY_FUNCTION PASSWORD_VERIFY_GEST n'est pas valide"

    Merci d'avance pour vos reponses.

  5. #5
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 81
    Par défaut
    Normalement la fonction le CREATE PROFILE.. que vous fêtes est dans le même shema dans le quel la fonction a été crée, non?

    je vois que la fonction doit passé avec trois parametres
    SQL> create or replace FUNCTION verify_function
    2 (
    3 nom varchar2,
    4 pwd varchar2,
    5 old_pwd varchar2
    6 )
    et au moment de l'appel c'été
    9 PASSWORD_VERIFY_FUNCTION verify_function;
    est ce Normale? :

  6. #6
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 226
    Par défaut c bon
    les paramètres y sont bien. ya pas de problème la dessus.

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut Re: meme probleme
    Citation Envoyé par Cyborg289
    Voilà j'ai modifié aussi la fonction de oracle pour y appliquer mes propres restrictions.
    Pourrions-nous voir le nouveau code ?

  8. #8
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 226
    Par défaut le code
    voici le code de la fonction modifiée:


    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
     
     
    CREATE OR REPLACE FUNCTION Verify_Password_Gest
    (username varchar2,
      password varchar2,
      old_password varchar2)
      RETURN boolean IS 
       n boolean;
       m integer;
       differ integer;
       isdigit boolean;
       ischar  boolean;
       ispunct boolean;
       digitarray varchar2(20);
       punctarray varchar2(25);
       chararray varchar2(52);
     
    BEGIN 
       digitarray:= '0123456789';
       chararray:= 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
       punctarray:='!"#$%&()``*+,-/:;<=>?_';
     
       -- Check if the password is same as the username
       IF password = username THEN
         raise_application_error(-20001, 'Meme nom que l_utilisateur');
       END IF;
     
       -- Check for the minimum length of the password
       IF length(password) < 7 THEN
          raise_application_error(-20002, 'Mot de Passe de moins de 6 caractères');
       END IF;
     
       -- Check if the password is too simple. A dictionary of words may be
       -- maintained and a check may be made so as not to allow the words
       -- that are too simple for the password.
       IF NLS_LOWER(password) IN ('GEST') THEN
          raise_application_error(-20002, 'Vous ne pouvez commencer par les lettres Gest');
       END IF;
     
       -- Check if the password contains at least one letter, one digit and one
       -- punctuation mark.
       -- 1. Check for the digit
       isdigit:=FALSE;
       m := length(password);
       FOR i IN 1..10 LOOP 
          FOR j IN 1..m LOOP 
             IF substr(password,j,1) = substr(digitarray,i,1) THEN
                isdigit:=TRUE;
                 GOTO endsearch;
             END IF;
          END LOOP;
       END LOOP;
       IF isdigit = FALSE THEN
          raise_application_error(-20003, 'Votre Mot de passe doit contenir au moins 1 chiffre');
       END IF;
     
     
       <<endsearch>>
       -- Check if the password differs from the previous password by at least
       -- 4 letters
       IF old_password = '' THEN
          raise_application_error(-20004, 'Old password is null');
       END IF;
       -- Everything is fine; return TRUE ;   
       differ := length(old_password) - length(password);
     
       IF abs(differ) < 4 THEN
          IF length(password) < length(old_password) THEN
             m := length(password);
          ELSE
             m := length(old_password);
          END IF;
          differ := abs(differ);
          FOR i IN 1..m LOOP
              IF substr(password,i,1) != substr(old_password,i,1) THEN
                 differ := differ + 1;
              END IF;
          END LOOP;
          IF differ < 4 THEN
              raise_application_error(-20004, 'Votre nouveau mot de passe doit differrer de 4 caractères par rapport au précédent');
          END IF;
       END IF;
       -- Everything is fine; return TRUE ;   
       RETURN(TRUE);
    END;

  9. #9
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il n'y aurait pas d'objets invalides par hasard ?

  10. #10
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 226
    Par défaut hum
    c à dire je ne comprends pas vraiment ta question

  11. #11
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    que donne la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select object_name,object_type
    from all_objects
    where status='INVALID';

  12. #12
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 226
    Par défaut oui en effet
    ma fonction est donnée en resultat de cette requête. D'où ma nouvelle question comment remedier au probleme parce que je ne vois toujours ps où il est ?

  13. #13
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select text from all_errors where name = 'VERIFY_FUNCTION'
    order by line
    et que donne ceci ?

  14. #14
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 226
    Par défaut
    aucune ligne selectionnée

  15. #15
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    alors là c'est bizarre... essaye de dropper et recréer la fonction STP

  16. #16
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    Citation Envoyé par orafrance
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select text from all_errors where name = 'VERIFY_FUNCTION'
    order by line
    et que donne ceci ?
    faudrait pas plûtot mettre 'Verify_Password%' ?

    genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select text from all_errors where upper(name) = 'VERIFY_PASSWORD%'
    order by line

  17. #17
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    ha oui bien sûr, le nom de la fonction a changé

    c'est bien VERIFY_PASSWORD_GEST qu'il faut vérifier

  18. #18
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 226
    Par défaut PFFFFF
    Apres un drop et une nouvelle creation ca marche le problème ests résolu.
    Merci de votre aide.

  19. #19
    Membre confirmé
    Inscrit en
    Décembre 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 226
    Par défaut
    Une autre petite question:

    Dans ma fonction j'utilise la condition:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    IF NLS_LOWER(password) IN ('GEST') THEN
          raise_application_error(-20002, 'le mot de passe ne peut pas contenir gest');
     END IF;
    il semblerait que cette condition ne marche que si le password est "GEST".
    hors il faudrait qu'il ne marc he pas meme quand "GEST" est dans le password. Quelqun aurait il la reponse ?

  20. #20
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    Que donne ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    IF lower(password) NOT LIKE '%gest%' THEN
          raise_application_error(-20002, 'le mot de passe ne peut pas contenir gest');
     END IF;

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [PHP 5.2] Ouvrir une page en fonction d'un mot de passe
    Par Marc31 dans le forum Langage
    Réponses: 10
    Dernier message: 06/07/2015, 19h42
  2. fonction mot de passe en C ?
    Par space_56 dans le forum C
    Réponses: 7
    Dernier message: 09/08/2007, 09h47
  3. fonction acceder mot de passe ado
    Par khier dans le forum Bases de données
    Réponses: 1
    Dernier message: 03/08/2006, 23h31
  4. Verifier Id et mot de passe
    Par akalaan dans le forum Débuter
    Réponses: 5
    Dernier message: 10/05/2006, 13h47
  5. Réponses: 4
    Dernier message: 14/11/2005, 11h59

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