1. Create private database links
2. Submit and modify DBMS_JOBS and scheduler jobs.
For the last 2 you can use DBMS_IJOB and DBMS_ISCHED.
But for database links there is another way - DBMS_SYS_SQL
This hidden package has a function called PARSE_AS_USER which can parse a cursor after doing a 'become user'.
Here's a sample bit of code that creates a database link as another user.
First you have to find out the user's USER_ID (in my case it was 428) and then pass that number in to the function to tell it which user to become.
DECLARE l_cursors DBMS_SQL.NUMBER_TABLE; l_result NUMBER; BEGIN l_cursors(428):=DBMS_SYS_SQL.OPEN_CURSOR; --parsing statement as a different owner DBMS_SYS_SQL.PARSE_AS_USER( c => l_cursors(428), statement => 'create database link luke connect to scott identified by tiger using ''dev''', language_flag => dbms_sql.native, userid => 428 ); l_result:=DBMS_SYS_SQL.EXECUTE(l_cursors(428)); END; /
And there you have it the database link luke is now created with an owner user_id 428.