Oracle
 sql >> Base de données >  >> RDS >> Oracle

Vérifiez que le mot de passe de l'utilisateur est valide ou non dans plsql

Je ne pense pas que la base de données Oracle vous donne une API pour ce faire. Un truc que vous pourriez utiliser serait d'utiliser un lien de base de données de bouclage pour le vérifier. Comme ceci :

DECLARE
  p_username        VARCHAR2 (30) := 'MMCP';  -- Change to the user whose password you are validating
  p_test_password   VARCHAR2 (30) := 'NOT_MY_PASSWORD';  
  p_loopback_connection_string VARCHAR2(80) := 'ORCLQA';  -- Change this for your environment
BEGIN

  BEGIN
    EXECUTE IMMEDIATE q'[drop database link password_test_loopback]';
  EXCEPTION
    WHEN OTHERS THEN
      NULL;
  END;

  EXECUTE IMMEDIATE
    'create database link password_test_loopback connect to "' || p_username || '" identified by "' || p_test_password || '" using ''' || p_loopback_connection_string || '''';

  EXECUTE IMMEDIATE q'[SELECT * FROM [email protected]_test_loopback]';

  EXECUTE IMMEDIATE q'[drop database link password_test_loopback]';
  
  dbms_output.put_line('Password is good');
EXCEPTION WHEN OTHERS THEN
  IF SQLCODE = -1017 THEN
    DBMS_OUTPUT.PUT_LINE('Password is wrong');
  ELSE
    raise;
  END IF;
END;

Des options plus avancées consisteraient à trouver un moyen d'utiliser l'authentification unique / LDAP pour votre authentification Oracle. Ensuite, votre problème devient :comment valider un nom d'utilisateur/mot de passe dans mon dictionnaire LDAP, ce qui est beaucoup plus facile.