We are in the process of implementing a payroll system using SQL 2008 as a backend which will obviusly need to store some sensitive data including SSN, salary, and routing information for direct deposit. Unfortunately none of these columns are encrypted by default, and without a lot of rework I can't add encryption to the system. I could add it in code, but there are reports (like W-2s) that need to include this information.
I'd like to add column encryption at the SQL level so the process is fairly transparent to the application. Basically I want a CYA incase someone has there identity stolen and they want to start pointing fingers because I can see the data.
I have successfully created a new table replacing SSN with the encrypted column, and created a view to do the decryption with triggers to update the underlying table. The only problem is that as sa and db_owner I have rights on the Certificate used to encrypt, so it doesn't hide it from me. Even if I could hide it from me, I can use EXECUTE AS LOGIN='app_user' to run any query I want in the context of the application.
We have a separate security group here (not SQL experts) but one thought is for them to create and own the certificate used for the encryption, but I still run into problems because I can use EXECUTE AS...
Does anyone have any ideas on how I can lock myself out of specific data while staying in the sysadmin role for basic administration tasks?