Otra función interesante del paquete DBMS_METADATA es get_Granted_DDL. Tal como su nombre sugiere, te devuelve el código ddl de los permisos que tenga el usuario que le pasas como parámetro. En este caso le pasaríamos dos parámetros, el primero de los cuales es el tipo(a elegir entre AUDIT, DEFAULT_ROLE, OBJECT_GRANT, PROXY, ROLE_GRANT, SYSTEM_GRANT y TABLESPACE_QUOTA), el segundo es el usuario. Los otros parámetros pueden tomar los valores por defecto. Por ejemplo, la siguiente select nos daría el ddl de creación de permisos de sistema para el viejo Scott
SET LONG 5000 SELECT DBMS_METADATA.GET_GRANTED_DDL( 'SYSTEM_GRANT', 'SCOTT' ) FROM DUAL /
Esta nos daría la de los objetos a los que tiene privilegios directamente, sin pasar por un rol:
SET LONG 5000 SELECT DBMS_METADATA.GET_GRANTED_DDL( 'OBJECT_GRANT', USER ) AS CPRIVILEGIO FROM DUAL /
Para los otros posibles valores para el tipo, no he conseguido hacerlo funcionar. No sé si es que me faltan privilegios o que estoy haciendo algo mal (o las dos cosas a la vez).