I continue to be amazed at the "creativity" of developers for ISVs. It seems each time I assist with an installation of a 3rd party product somebody comes up with a new way to do this wrong! That may sound politically incorrect, but this is getting ridiculous. It's not that hard. I mean, really, SQL Server is a database - not a file server, not a web server, not a conduit to an underlying operating system - a database. With that said, here are some things I've actually seen during 3rd party product installs, and things you should never do, with a little bit of "why" thrown in for good measure.
1. Using SA as the only possible account for creating the database and objects. I mean really, aren't we past this. What if I don't allow mixed mode or SQL Authentication in the environment. Also, I'm not likely to give up the SA password to the installer sent onsite by a reseller.
2. A close cousin to #1 is the famous "blank" password for SA - required. Yes, I've seen it, and recently!
3. Still in the ballpark with SA is the ubiquitous need to have a new user in the sysadmin server role in order to install and run the application. Usually 3rd party apps want to create a user, create a database, and populate that database. That can be solved with db_creator and security_admin roles, though I'm not fond of giving these up either. The bad news, Microsoft is one of the worst vendors about doing this (see Sharepoint, Commerce Server, CMS, LCS). I would prefer to see an application that has db_owner rights on the database with no server rights.
4. Requiring a unique sort order for the server installation - Yes I saw this recently. It was not sufficient to have the database or even specific columns set to a collation, but the entire server had to be, because it did things in TempDB that required the specific collation setting. This was rather frustrating, since they could have just created the temp tables with the proper collation and it would have been fine. Instead, we had to create another named instance for this app.
5. Creating folders on the database server during the installation, and using those folders for passing data between the app and the database.
6. Using xp_cmdshell in the install and during the normal operation of the application. I hope we are all locking this down by now, at least for admins only :). Apps should not need to access the OS from the database. If so, how about a custom XP or .NET SP with EXTERNAL CAS?
7. Requiring a specific MDAC version on the database server. Hopefully, SNAC will fix this, but until then this is still a problem.
8. Creating an obfuscated database structure that essentially recreates the SQL Server system tables within user tables. I've seen this from 2 different applications, and boy does it make it hard to troubleshoot data related issues for that application. Especially when the table names are T49, T101, S10, etc. If you are reading this and recognize these table names, you know who you are.
9. Enforcing Primary Keys and Referential Integrity within the application. This is a bad practice whether you are an ISV or in house developer. Data changes outside the app, whether you like it or not. The only way to be sure it fits within the rules of the data model is to create constraints. It's not that hard, and, no, it doesn't impact performance. I know, I know, the database won't be "platform agnostic."
Also, if there is a need to replicate the data for reporting, replication requires Primary Keys. One large CRM vendor who shall remain nameless is known for this practice. I've actually seen people create PKs, so they can replicate the data for reporting.
10. Last but certainly not least - requiring the SQL Service to run as Local System. This one baffled me, too, but I saw it! The application actually didn't work if the account running the service was a domain or local user. When I called the vendor to see if there were OS permissions I had to grant, they didn't know and said they wouldn't support another configuration.
I'm sure others have run into some interesting ones. Post yours vendor install experiences here, so we can share in your misery. Hopefully, someone will read this and avoid one of these worst practices.
Jon