You can run this against your database(s)... and maybe store the results in a table somewhere else.
It shows the permissions on all of your database objects and includes a re-grant script (if sometime down the road a 3rd party install or SyncOwnershipAndSecurity screwed something up...)
Select Z.*
FROM
(
select permission_name, state_desc, type_desc, U.name, OBJECT_NAME(major_id) As ObjectName, CAST(State_desc AS varchar(100)) + ' ' + CAST(permission_name AS varchar(100)) + ' ON [' + CAST(OBJECT_NAME(major_id)AS varchar(100)) + '] TO [' + CAST(U.name collate database_Default AS varchar(100)) + ']' As SQLScript
from sys.database_permissions P
JOIN sys.procedures T ON P.major_id = T.object_id
JOIN sysusers U ON U.uid = P.grantee_principal_id
UNION
select permission_name, state_desc, type_desc, U.name, OBJECT_NAME(major_id) As ObjectName, CAST(State_desc AS varchar(100)) + ' ' + CAST(permission_name AS varchar(100)) + ' ON [' + CAST(OBJECT_NAME(major_id)AS varchar(100)) + '] TO [' + CAST(U.name collate database_Default AS varchar(100)) + ']' As SQLScript
from sys.database_permissions P
JOIN sys.tables T ON P.major_id = T.object_id
JOIN sysusers U ON U.uid = P.grantee_principal_id
UNION
select permission_name, state_desc, type_desc, U.name, OBJECT_NAME(major_id) As ObjectName, CAST(State_desc AS varchar(100)) + ' ' + CAST(permission_name AS varchar(100)) + ' ON [' + CAST(OBJECT_NAME(major_id)AS varchar(100)) + '] TO [' + CAST(U.name collate database_Default AS varchar(100)) + ']' As SQLScript
from sys.database_permissions P
JOIN sys.views T ON P.major_id = T.object_id
JOIN sysusers U ON U.uid = P.grantee_principal_id
UNION
select permission_name, state_desc, 'Scalar-valued Function' AS type_desc, U.name, OBJECT_NAME(major_id) As ObjectName, CAST(State_desc AS varchar(100)) + ' ' + CAST(permission_name AS varchar(100)) + ' ON [' + CAST(OBJECT_NAME(major_id)AS varchar(100)) + '] TO [' + CAST(U.name collate database_Default AS varchar(100)) + ']' As SQLScript
from sys.database_permissions P
JOIN sys.sysobjects T ON P.major_id = T.id
JOIN sysusers U ON U.uid = P.grantee_principal_id
WHERE t.type = 'Fn'
UNION
select permission_name, state_desc, 'Table-valued Function' AS type_desc, U.name, OBJECT_NAME(major_id) As ObjectName, CAST(State_desc AS varchar(100)) + ' ' + CAST(permission_name AS varchar(100)) + ' ON [' + CAST(OBJECT_NAME(major_id)AS varchar(100)) + '] TO [' + CAST(U.name collate database_Default AS varchar(100)) + ']' As SQLScript
from sys.database_permissions P
JOIN sys.sysobjects T ON P.major_id = T.id
JOIN sysusers U ON U.uid = P.grantee_principal_id
WHERE t.type = 'TF'
) as Z
Order by z.name, z.ObjectName