I also remove all rights assigned to the PUBLIC group/role so that a user has to be explicitly associated with a specific role. You don't come in one morning and find a strange IUSR_WebServer user in your database!

I also use NT security with a lot of my database, but NOT the NT administrators group.

I'm fortunate in that I can dictate exactly what goes on in my database so I also remove any direct on tables so that everything has to come via stored procedures.

I find that once my developers see the performance increase of stored procedures and realise how much simpler a stored procedure makes their life I find they become absolute zealots on the subject!

I totally agree. The arguments I get are "this is the only user I'll ever need" which usually occurs because the developer will be using a sql login embedded in the application. This isn't a bad argument, as arguments go. The other is "no other user will need these exact permissions/it takes TOOOOO much time to make a role for just one person, why would you do that". Not a good argument.

I definitely agree with David about removing access to Public! Stored procedures aren't always an option, depending on how/who/when the app was built.

I thought the reasons you presented were sound - much better than the other knucklehead who rights worst practices articles...what's his name again?

Glad you guys agree. This is one area that I think causes more problems than it solves.

I hate embedding logins in an application. At the least, it should be in a text file (can be encrypted) so it can be changed. Nothing worse than a security breach causing an app to be recompiled. Especially if you have distributed this to clients.

The problem with embedding login/password is there arent any simple good alternatives (depending on your definition of simple and good). If you're going to encrypt something, do it well or you might be making it worse instead of better.

I agree there isn't a good alternative. IMHO, it's poor practice to allow an application to log in without requiring a user to log in as well.

The only good solution I saw, was an app that logged into a login server and submitted a user/pwd. The result set then "told" the app where to go for the real database. Hard part here was replicating login information.

I have removed the BUILTIN/Administrators group, since our hardware people are NT admins and don't really need them rootin around in SQL. I also have created several groups, General Users, Confidential Data Viewers, etc…, but I also have a few singled out users that I assign rights to on an individual basis. Most are Admins, but on occasion we have visiting engineers that revolve around the company that require changes to their access almost daily, then they are gone. I find it easier to adjust their rights as needed then to create a group for a one time thing.

Where there's one, there will often be more. What's wrong with having a Eng1 group and adjusting the rights there? If they leave, you are no worse off. If they come back or someone takes their place, then you are covered. You can also remove teh user and leave the role.