Script para listar permisos

Esto no es algo nuevo, en realidad tengo mucho tiempo de tener este codigo. Y otras veces me fue super util. Hoy de hecho me funciono en el trabajo cuando necesitaba replicar permisos de una base de datos que tuvimos que cambiar de un servidor a otros.

SELECT 
		[Permisos] = state_desc 
			+ ' ' + permission_name 
			+ ' on [' + c.name
			+ '].[' + b.name 
			+ '] to [' + ar.name 
			+ ']' COLLATE latin1_general_ci_as
FROM 
	sys.database_permissions AS a
	INNER JOIN sys.objects AS b 
		ON a.major_id = b.object_id
	INNER JOIN sys.schemas AS c 
		ON b.schema_id = c.schema_id
	INNER JOIN sys.database_principals AS ar 
		ON a.grantee_principal_id = ar.principal_id
UNION
SELECT 
		[Permisos] = state_desc 
			+ ' ' + permission_name 
			+ ' on Schema::['+ c.name 
			+ '] to [' + ar.name 
			+ ']' COLLATE latin1_general_ci_as
FROM 
	sys.database_permissions AS a
	INNER JOIN sys.schemas AS c 
		ON a.major_id = c.schema_id AND a.class_desc = 'Schema'
	INNER JOIN sys.database_principals AS ar 
		ON a.grantee_principal_id = ar.principal_id