How to give access to execute packages and select from table for another schema

oraclepermissions

I have a schema called SCHEMA1 with packages and tables that needs to be accessed by user SCHEMA2.

I want SCHEMA2 to have access for executing packages and look at source code. Also I would like to give SELECT access to all tables for SCHEMA2.

How can I do that? Thank you.

Best Answer

I answered a very similar question on stackoverflow.

Basically, it's this:

BEGIN
  FOR Rec IN (SELECT object_name, object_type FROM all_objects WHERE owner='SCHEMA1' AND object_type IN ('TABLE','VIEW','PROCEDURE','FUNCTION','PACKAGE')) LOOP
    IF Rec.object_type IN ('TABLE','VIEW') THEN
      EXECUTE IMMEDIATE 'GRANT SELECT ON SCHEMA1.'||Rec.object_name||' TO SCHEMA2';
    ELSIF Rec.object_type IN ('PROCEDURE','FUNCTION','PACKAGE') THEN
      EXECUTE IMMEDIATE 'GRANT EXECUTE ON SCHEMA1.'||Rec.object_name||' TO SCHEMA2';
    END IF;
  END LOOP;
END;