sql >> Base de Datos >  >> RDS >> Oracle

Verifique que la contraseña del usuario sea válida o no en plsql

No creo que la base de datos Oracle te proporcione una API para hacer esto. Un truco que podría usar sería usar un enlace de base de datos de bucle invertido para verificarlo. Así:

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;

Las opciones más avanzadas serían encontrar una manera de usar el inicio de sesión único/LDAP para su autenticación de Oracle. Entonces, su problema es:¿cómo valido un nombre de usuario/contraseña en mi diccionario LDAP, que es mucho más fácil?