Grant schema permissions effective for everything existing and everything that will exist
One way to do this is to create a custom role.  Many places use the DBA role out of the box but this often grants way more permissions than are really needed such as "DROP DATABASE".

Create a role, for example, LIMITED_PRODUCTION_DBA_ROLE, and grant 

select, insert, update, delete any table;


This allows "Query tables, views, or materialized views in any schema except SYS". You can grant other privilege as required to the role.  Then grant the role to your users.  For development you will want to have more privileges so in your refresh script you can add a DEVELOPMENT_DBA_ROLE and grant that.