To list all users and roles who can access objects in a schema, we can use following query. This will be useful when there is a need of migrating a schema from one database to another.
with users_roles as( (select grantee, granted_role from dba_role_privs) union (select username, username from dba_users) union (select role, role from dba_roles) ), direct_grantees as ( select distinct grantee from dba_tab_privs where owner in ('SCHEMA_USER') ), all_grantees as ( select distinct grantee from users_roles start with granted_role in (select * from direct_grantees) connect by nocycle prior grantee = granted_role ) select grantee from all_grantees -- Filter as needed -- For example, get only users not roles where grantee in (select username from dba_users);