Changing own user permissions with Oracle SQL not being the DBA
You mentioned as one of your examples as "from production to development" .. so I'll start there, and with that, assume that your different "environments" are, in fact, different instances/databases as well.

Always "PULL" data ... rather than "PUSH".
So in other words, login to where you the data will be INSERTED.  That id should have INSERT access to the target tables. That same id should ONLY HAVE READ access to the source (ie production).
You can set that up via a db link or such.

You then 

INSERT into &lt;local table&gt;
  select * from &lt;remote table&gt;@dblink;


and you can't go wrong, since you don't have access.

This works for any two environments ... if you setup those db links using READ ONLY ids, and you do the INSERT locally with a user with local INSERT privs .. you're safe.