If I understand well in SP (out of the box) it is not possible to define single column (fields) permission for the various users of a site. I have seen some third party solutions which can do that, but they're not free. I have tried some workarounds to realize this, but as even the views of a lists are not permissions-customizable, i was not able to get things working. Is there a way to realize this option or the only way is to buy something?
Even if you buy something, the third party solution won't be absolute. All the third party solutions do is lock down the views that can be shown to the end users. But if a user knows what they are doing, they can still get the data through Microsoft Access, Web Services, Reporting Services, and other means.
If you're looking for something to make it a little more difficult for someone to get the data, the third party tools will work. If you're looking for a secure solution, you probably will need to store the secret data in another list, then set permissions on the other list appropriately.
In terms of make vs buy anything the 3rd party solutions have implemented you can implement yourself. You need to determine the return on investment based on your requirements.
I would personally be suspicious of the 3rd party solutions I would advise to evaluate if they are truly secure by testing if the secured data is exposed by
- Object Model Access
- RSS Feeds
- Export to Excel
- SharePoint Workspace
- Document Properties in Word
- Full Text Search
Remember that the Full Text Search will bypass most kinds of security as the crawl typically run as a highly privileged user, renders the text in the WebPart and indexes it secure information can then leak either in the hit highlight summary.
Larbo's suggestion to store the data in a second list with appropriate item level permissions and using a lookup column to join it in is a good idea.
Additionally you might consider.
If the data is cheap to recreate or is stored somewhere else already you could implement a custom SPField to retrieve the data at runtime and render it.
If the data is expensive and the lookup column is unmanageable you couldstore the data encrypted in the list and only decrypt it at render time. Again a custom SPField should be able to do this.
you can find a usefull solution for your problem from here: http://splistsecurity.codeplex.com each column could have a separate permission