Am besten sind zwei Schemata:
a) ein Webuser namens DIRTY
b) ein Securityuser namens SICHERHEIT
Das Schema SICHERHEIT enthält die USER-Tabelle mitsamt den Securityprocedures.
DIRTY erhält nur die Executerechte auf diese Securityprocedures,
jedoch keinerlei Objektprivilegien(wie SELECT, UPDATE) auf Tabellen in SICHERHEIT
Zwei Hinweise noch:
1) Schreib "select 1 into l_count from USERS where USERNAME = p_username;" oder so
count(*) ist laufzeitmäßig zu teuer
2) Passwörter sollten immer verschlüsselt in der DB gespeichert sein, nie im Klartext
3) Für Fortgeschrittene - es gibt die Möglichkeit der Verschlüsselung von DB-Inhalten
(siehe
http://www.oracle.com/webfolder/technetwork/de/community/dbadmin/tipps/tde/index.html)
Hier kann man dann schön mit Wallets jonglieren.