Friend33,
You are getting into deep waters here. Security is one of those hoary subjects that start RDBMS and system design 'wars'.
On the basis that I can already feel the incoming bombshells, here goes.
First of all, the questions seem slightly contradictory. In item 1 you state that the form must be designed to prevent password re-use, but in 2, go on to say that they are stored in the database. Is the form responsible for password management, or the database? If (as seems highly unlikely) it's the form, then it's up to the experts in whatever front end technology you're using to design a secure form. This is nothing to do with the database, ergo nothing to do with Oracle, so I'll say no more.
If, as I suspect, you are using a form to allow users to enter their username/password combination, and the form is connecting to Oracle to check up on the validity of the password, then the form just needs to forward the password to the database for validation. This implies that you have database managed security, and not form managed security. If your security
is database managed, then several different things apply.
First of all, storing passwords in plain text is barking mad. Oracle automagically obfuscates password info, specifically to prevent the happy hacker from gaining simple plain-text access to the crown jewels. By having a system which does this, your database security has already been severely degraded, and I strongly recommend that you do something different. Since, by your own statements, you are in the process of designing this thing, now is a golden opportunity to do so.
The art of password hashing (which is one possible solution) is covered by others far more knowledgable than I at
A second possible solution is to use password checking routines. By the use of profiles it is possible to enforce password quality and expire passwords etc. This is a subject in its own right, so I can't cover it here, but you should look at the documentation.
W.R.T. actually checking passwords and the use of the PASSWORD_VERIFY_FUNCTION, there are elegant solutions and advice available from
All this referring to other sources may seem like a cop out, but believe me, database security is a vast subject area, and you just have to do some homework, before implementing the solution. I've spent ages reading documentation, so I know how it can seem like drudgery, but it does sort the men from the boys.
Please let me know how you get on, particularly with the elimination of plain-text passwords.
Regards
Tharg
Grinding away at things Oracular