wfudge:our DBAs are asking web developers to use fixed domain NT ID accounts instead of SQL account
Totally agree that this is the best way to do things -- and it's easy. We set up a system account (ie, a windows group) to run everything under and use impersonation to become that account. Impersonation can be easily done using the aspnet_setreg.exe utility to store the impersonated userid/pwd in encrypted strings in the registry (see link below for examples). In your web.config you put something like this:
<identity impersonate="true"
userName="registry:HKLM\SOFTWARE\MY_SECURE_APP\identity\ASPNET_SETREG,userName"
password="registry:HKLM\SOFTWARE\MY_SECURE_APP\identity\ASPNET_SETREG,password" />
to do the actual impersonation. You need to make sure the asp.net worker process has the permission to read this registry key, see http://support.microsoft.com/default.aspx/kb/329290 for details
You would then grant the system account (ie, the windows group) all the needed permissions in your database -- that way you don't have to give your users any database permissions at all.
You can also lock down your web site itself by using the "allow/deny" feature of web.config, this is called URL control.
See http://msdn2.microsoft.com/en-us/library/wce3kxhd.aspx.
What we do in our shop is to create yet another system account, put all the users into that account, and allow that account and deny all others. For example:
<authorization>
<allow roles="DOMAIN\AppGroup" />
<allow users="DOMAIN\dbland07666"/>
<deny users="*" />
In this example, everyone who is a member of AppGroup plus user dbland07666 has the authority to reach this URL. You could make AppGroup the same windows group used for your database permissions, but that may reduce your flexibility in case you want to eg give some peopel r/o permissions in the DB and others r/w.
You can take this a step further by controlling the ACL on the folders themselves so no one can even see the contents of the folder in Windows Explorer (we do this for one highly sensitive web service). Only let members of AppGroup see the folders to begin with.
This is very tight security if you use all these levels. And, of course, you can use SSL too if you need to.