Total Pageviews

Sunday, June 1, 2025

How to create a user in Oracle who has access to all existing objects of a particular schema

 Step 1: Create the User

New user: ashu
Schema: Metals

create user ashu identified by ashu
default tablespace metals
temporary tablespace temp
quota unlimited on metals;

Grant create session to ashu;


Step 2 : Grant Access to All Existing Objects in a Particular Schema called METALS to new user ASHU.

BEGIN
  FOR t IN (SELECT table_name FROM all_tables WHERE owner = 'METALS') LOOP
    EXECUTE IMMEDIATE 'GRANT SELECT ON METALS.' || t.table_name || ' TO ASHU';
  END LOOP;
END;
/

Step 3: Grant EXECUTE on all procedures and packages in schema METALS

BEGIN
  FOR p IN (SELECT object_name FROM all_objects WHERE owner = 'METALS' AND object_type IN ('PROCEDURE', 'PACKAGE')) LOOP
    EXECUTE IMMEDIATE 'GRANT EXECUTE ON METALS.' || p.object_name || ' TO ASHU';
  END LOOP;
END;
/

Step 4: Grant SELECT on all views in schema METALS

  BEGIN
  FOR v IN (SELECT view_name FROM all_views WHERE owner = 'METALS') LOOP
    EXECUTE IMMEDIATE 'GRANT SELECT ON METALS.' || v.view_name || ' TO ASHU';
  END LOOP;
END;
/

or use below command to provide the access on Valid views only.

BEGIN
  FOR v IN (SELECT object_name 
            FROM all_objects 
            WHERE owner = 'METALS' 
              AND object_type = 'VIEW' 
              AND status = 'VALID') LOOP
    EXECUTE IMMEDIATE 'GRANT SELECT ON METALS.' || v.object_name || ' TO ASHU';
  END LOOP;
END;
/
Verify using below queries:

col GRANTEE form a12
col OWNER form a12
col TABLE_NAME form a30
col GRANTOR form a13
col PRIVILEGE form a13
SELECT * 
FROM DBA_TAB_PRIVS 
WHERE GRANTEE = 'ASHU';

SELECT * 
FROM DBA_ROLE_PRIVS 
WHERE GRANTEE = 'ASHU';

SELECT * 
FROM DBA_SYS_PRIVS 

WHERE GRANTEE = 'ASHU';


No comments:

Post a Comment