Hello,
I have a user that has created a stored procedure. However, I'm having difficulty granting the execute privilege to any user. I even executed the following statement as SYSTEM and SYS (as SYSDBA) where tim is the user that created the stored procedure and cs_pass is the stored procedure:
I also granted to following to myself, and I still get the same result. Any help?Code:SQL> grant execute on tim.cs_pass to toby; grant execute on tim.cs_pass to toby; * ERROR at line 1: ORA-01031: insufficient privileges
It it helps, the code for the stored procedure is:Code:GRANT DBA TO SYSTEM; GRANT CONNECT TO SYSTEM; GRANT RESOURCE TO SYSTEM; GRANT ANY PRIVILEGE TO SYSTEM; GRANT CONNECT_MTN TO SYSTEM; GRANT EXP_FULL_DATABASE TO SYSTEM; GRANT IMP_FULL_DATABASE TO SYSTEM; GRANT SELECT_CATALOG_ROLE TO SYSTEM; GRANT EXECUTE_CATALOG_ROLE TO SYSTEM; GRANT AQ_ADMINISTRATOR_ROLE TO SYSTEM; GRANT GATHER_SYSTEM_STATISTICS TO SYSTEM; ALTER USER SYSTEM DEFAULT ROLE ALL; GRANT ANALYZE ANY TO SYSTEM; GRANT ALTER ANY TYPE TO SYSTEM; GRANT ALTER ANY INDEX TO SYSTEM; GRANT ALTER ANY TABLE TO SYSTEM; GRANT EXECUTE ANY TYPE TO SYSTEM; GRANT SELECT ANY TABLE TO SYSTEM; GRANT ALTER ANY INDEXTYPE TO SYSTEM; GRANT ALTER ANY PROCEDURE TO SYSTEM; GRANT DEBUG ANY PROCEDURE TO SYSTEM; GRANT UNLIMITED TABLESPACE TO SYSTEM; GRANT EXECUTE ANY INDEXTYPE TO SYSTEM; GRANT EXECUTE ANY PROCEDURE TO SYSTEM; GRANT SELECT ANY DICTIONARY TO SYSTEM;
Code:CREATE OR REPLACE PROCEDURE cs_pass (usernam varchar2, passw varchar2) AUTHID DEFINER IS usern varchar2 (10); pw varchar2 (10); sb char (2); oper char (8); comp char (10); user char (10); user_id numeric (5); fail_sw char (1); PROCEDURE write_log (comp char, user char, user_id numeric, fail_sw char, oper char) IS BEGIN execute immediate 'INSERT INTO TIM.T_CS_PASSWORD_LOG (comp, TIM_username, TIM_user_id, success_switch, operation, create_date) values (:1, :2, :3, :4, :5, :6)' using comp, user, user_id, fail_sw, oper, sysdate; END; BEGIN fail_sw := 'F'; comp := usernam; user_id := uid; oper := 'PASSWORD'; execute immediate 'SELECT USERNAME FROM DBA_USERS WHERE USER_ID = :1' INTO user USING uid; usern := usernam; pw := passw; sb := substr(usern, 1, 2); if sb <> 'BK' then write_log(comp, user, user_id, fail_sw, oper); return; end if; if upper(pw) = 'UNLOCK' then execute immediate 'alter user '||usern||' account unlock'; oper := 'UNLOCK '; fail_sw := 'S'; write_log(comp, user, user_id, fail_sw, oper); return; end if; execute immediate 'alter user '||usern||' identified by '||pw; fail_sw := 'S'; write_log(comp, user, user_id, fail_sw, oper); RETURN; END; /


Reply With Quote
Bookmarks