I've been using DBD::Oracle
seriously for around 4 years now and have contributed a number of patches to it.
The project I have been working on makes extensive use of DBD::Oracle connecting to the database as a user who has very little permissions (basically connect and create session and little else). This user cannot select, update, delete on any table and all access to the database is via package procedures and functions running with definer rights. As you can imagine this causes the DBD::Oracle test suite major headaches (in fact most of it cannot run at all).
Any data to be returned from the database is via a function returning a reference cursor and all updates and deletes are performed via procedures. This keeps all the logic inside the database.