3 votes

Exiger l'ancien mot de passe lors de la définition d'un nouveau mot de passe pour un utilisateur spécifique dans Oracle

Est-ce que Oracle 12 prend en charge le fait que l'ancien mot de passe soit requis lors de la modification du mot de passe d'un utilisateur spécifique ?

Ce que j'aimerais :

ALTER USER user_a IDENTIFIED BY secret123;
-- ERROR, missing old password

ALTER USER user_a IDENTIFIED BY secret456 REPLACE secret123;
-- OK

ALTER USER user_b IDENTIFIED BY secret789;
-- OK, since user_b does not require old password when changing it

Merci !

2voto

wolφi Points 2281

Oui, cela est pris en charge depuis Oracle 9i, lorsqu'une fonction a été introduite pour vérifier la complexité d'un nouveau mot de passe et, éventuellement, la différence avec l'ancien mot de passe. Comme Oracle ne stocke que les hachages, et non les mots de passe, il ne peut pas comparer l'ancien et le nouveau mot de passe à moins que l'utilisateur ne le fournisse pendant le changement.

Ainsi, tous les utilisateurs ayant un PROFILE où le PASSWORD_VERIFY_FUNCTION est défini sont tenus d'avoir l'ancien mot de passe, même si cette fonction ne vérifie aucun mot de passe :

CREATE OR REPLACE FUNCTION always_true (
  username     VARCHAR2, 
  password     VARCHAR2, 
  old_password VARCHAR2) RETURN boolean IS
BEGIN
  RETURN TRUE;
END always_true;
/

CREATE PROFILE always_true 
  LIMIT PASSWORD_VERIFY_FUNCTION always_true;

CREATE USER user_a IDENTIFIED BY secret123 PROFILE always_true;
GRANT CREATE SESSION to user_a;

Maintenant user_a doit spécifier l'ancien mot de passe :

ALTER USER user_a IDENTIFIED BY secret123;
ORA-28221: REPLACE not specified

ALTER USER user_a IDENTIFIED BY secret456 REPLACE secret123;
User altered.

Un utilisateur avec un profil sans PASSWORD_VERIFY_FUNCTION ou ce paramètre réglé sur NULL n'a pas besoin de spécifier l'ancien mot de passe :

CREATE PROFILE without_function 
  LIMIT PASSWORD_VERIFY_FUNCTION NULL;

CREATE USER user_b IDENTIFIED BY secret123 PROFILE without_function;
GRANT CREATE SESSION to user_b;

Maintenant user_b peut changer son mot de passe sans avoir l'ancien mot de passe :

ALTER USER user_b IDENTIFIED BY secret789;
User altered.

La deuxième option est d'avoir le privilège ALTER USER mais ce n'est que pour les administrateurs, car ils peuvent changer tous les mots de passe de tous les comptes.

0voto

Marmite Bomber Points 6604

Oracle document dit

Vous pouvez omettre la clause REPLACE si vous définissez votre propre mot de passe pour la première fois ou si vous disposez du privilège système ALTER USER et que vous modifiez le mot de passe d'un autre utilisateur. Toutefois, à moins que vous ne disposiez du privilège système ALTER USER, vous devez toujours spécifier la clause REPLACE si une fonction de vérification de la complexité du mot de passe a été activée ...

La réponse serait donc : ajouter un password verification function aux utilisateurs qui doivent fournir l'ancien mot de passe (et révoquer le mot de passe de l'utilisateur). changement de mot de passe changement de privilég du système d'eux).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X