New attempt (still not 100% perfect of course, but this time the outcome should be syntactically correct, and it should be clear how to extend this if wanted):
Code:
WITH au(t,g,s,i,u,d,a,x,r,c) AS
(SELECT rtrim(TABSCHEMA)||'.'||rtrim(TABNAME),rtrim(GRANTEE),
selectauth,insertauth,updateauth,deleteauth,alterauth,indexauth,refauth,controlauth
FROM syscat.tabauth WHERE grantee = 'Name')
SELECT 'GRANT SELECT ON TABLE '||t||' TO '||g
||CASE s WHEN 'G' THEN ' WITH GRANT OPTION' ELSE '' END
||';' FROM au WHERE s IN ('G','Y')
UNION ALL
SELECT 'GRANT INSERT ON TABLE '||t||' TO '||g
||CASE i WHEN 'G' THEN ' WITH GRANT OPTION' ELSE '' END
||';' FROM au WHERE i IN ('G','Y')
UNION ALL
SELECT 'GRANT UPDATE ON TABLE '||t||' TO '||g
||CASE u WHEN 'G' THEN ' WITH GRANT OPTION' ELSE '' END
||';' FROM au WHERE u IN ('G','Y')
UNION ALL
SELECT 'GRANT DELETE ON TABLE '||t||' TO '||g
||CASE d WHEN 'G' THEN ' WITH GRANT OPTION' ELSE '' END
||';' FROM au WHERE d IN ('G','Y')
UNION ALL
SELECT 'GRANT ALTER ON TABLE '||t||' TO '||g
||CASE a WHEN 'G' THEN ' WITH GRANT OPTION' ELSE '' END
||';' FROM au WHERE a IN ('G','Y')
UNION ALL
SELECT 'GRANT INDEX ON TABLE '||t||' TO '||g
||CASE x WHEN 'G' THEN ' WITH GRANT OPTION' ELSE '' END
||';' FROM au WHERE x IN ('G','Y')
UNION ALL
SELECT 'GRANT REFERENCES ON TABLE '||t||' TO '||g
||CASE r WHEN 'G' THEN ' WITH GRANT OPTION' ELSE '' END
||';' FROM au WHERE r IN ('G','Y')
UNION ALL
SELECT 'GRANT CONTROL ON TABLE '||t||' TO '||g
||CASE c WHEN 'G' THEN ' WITH GRANT OPTION' ELSE '' END
||';' FROM au WHERE c IN ('G','Y')
This lists all table, view, and nickname privileges (except for the column-specific update & references privs) granted to user "Name".
Other authorisation tables in SYSCAT are COLAUTH, DBAUTH, INDEXAUTH, LIBRARYAUTH, PACKAGEAUTH, PASSTHRUAUTH, ROUTINEAUTH, SCHEMAAUTH, SEQUENCEAUTH, TBSPACEAUTH, and XMLOBJECTAUTH.
They have a similar structure and can thus be queried in a similar way as above.