Snooping-safe Vote tables I have a table with both user_id and vote. They are stored together so each user can only give one vote. However it's also problematic because admins can simply read who voted what. Is there a way to make it so that only the system(minus all humans) and the user knows what was voted by h(im|er)self?
How about encrypting the vote using a key that only the user and/or the system knows?

Adding some more information:


Use a symmetric encryption so that you can decrypt it.
Encrypt outside the database. Do not use database encryption functions if you want to protect it from DB admin because admin has several ways to snoop into the queries and read the keys. Instead, encrypt the data in your programming language of choice, and just store the encrypted data in the database. Admin never gets access to the actual data.
You can either have one secret key per user, or one common secret key for the entire system. However, you have to keep the key secret from the DB admin.I prefer going for one key for the entire system because that requires me to maintain only one key.
If you use a single key, you should add some random data to the votes before encrypting those. This will ensure that encrypted values for votes would look different for each user. One way to do it is to prepend 5 (>0) random characters before the vote data every time before encryption, and discard first 5 characters after decryption. Other option is to add the userid before the vote data before encryption. In the absence of such randomization, the admin may be able to 'guess' and 'alter' votes.


Hope this helps.