Title: RE: Question related to security

Only UserA can grant access on a table belonging to UserA (unless another user was granted access with admin option.)
However, UserB can create a procedure in the schema of UserA if UserB has CREATE ANY PROCEDURE system privilege.
The procedure created will run with the privileges of UserA, and will be able to grant access on tables belonging to UserA.

-----Original Message-----
From: Jamadagni, Rajendra [mailto:[EMAIL PROTECTED]]
Sent: mercredi, 5. mars 2003 09:35
To: Multiple recipients of list ORACLE-L
Subject: RE: Question related to security


I am surprised ... which user did you run this as? You mention in your original email that you don't jave the password for the owner and sys/system don't have admin rights ...

 
Can you solve the puzzle? If you don't have privs with grant option, how could you grant it to someone else? plus this being dbms_sql, you need to have those privs directly granted to you ...


-----Original Message-----
From: Meng, Dennis [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, March 05, 2003 9:35 AM
To: Multiple recipients of list ORACLE-L
Subject: RE: Question related to security


Grant select on all tables is not what we were looking for exactly because of the reason brought up by Pat. The following solution provided by Jacques solved the problem -

 
Execute Immediate is for Oracle 8.1 and later.
In 7.3.4 you need to use the dbms_sql package for dynamic SQL.
The procedure would be something like:
create procedure third_party_app_user.grant_priv
  (table_name_in in varchar2, privileges_in in varchar2, grantee_in varchar2)
as
   c_dynsql pls_integer ;
   ignore pls_integer ;
begin
   c_dynsql := dbms_sql.open_cursor ;
   dbms_sql.parse (c_dynsql,
                   'grant ' || privileges_in || '  on ' ||
                   table_name_in  || ' to ' || grantee_in,
                   dbms_sql.native) ;
   ignore := dbms_sql.execute (c_dynsql) ;
   dbms_sql.close_cursor (c_dynsql) ;
exception
   when others
   then
      if dbms_sql.is_open (c_dynsql)
      then
         dbms_sql.close_cursor (c_dynsql) ;
      end if ;
      raise ;
end ;
/

Reply via email to