I'm assuming that roles in SQL Server are much the same as roles in Oracle but for an inhouse product I don't think that is an issue - especially if each user is logging into the database. I've worked on plenty of apps that had a commonLogin interface that pulled the list of roles from the database for the current user and then activated them.
Oracle has the concept of a default role - which means it is on/off by default. If it is off then you have to actually turn it on with a password. This stops the users from logging into the database on their own because they don't have the ability to 'activate' the role. I would guess SQLServer has a similar ability.
Other than that method (which can be a pain with a large user base) I've always stuck with role_users that are different than the database owner. So app_user, app_batch, app_admin sort of thing and then depending on the functionality log into the dbase with that role_user_id. Then the access to those features is managed with AD groups.
My current project, which is hosted and maintained only by me, I'm falling back to the manage a list of permissions (or groups of permissions by a role). I have a add/remove permissions interface by user_id and then I restrict app access by permissions. Each user then logs into that app as user_id but most the database access is via a client_app_user id that has appropriate roles/rights in the database.
My scenario is a bit more complicated as I've got a single schema for different clients but the concept works with a single client.
Not sure if that helps or just re-enforces your plan. I find the biggest issue is how the persmissions have to be maintained / administered. A lot depends on the politics of the site about security etc. It is far quicker to get some database access than it is to get new AD roles setup but the HelpDesk can assign AD roles at our site so the user community can add/remove new users without our help when it is AD based. If you can get out of the way all the better.
Jack
Copyright (c) Marimer LLC