Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
![]() |
![]() |
Home -> Community -> Mailing Lists -> Oracle-L -> Writing pl/sql wrapper for 'alter user'
Hello -
I've been working on a PL/SQL package to give the ability to change passwords to
someone.
It does not work and fails with 1031: insufficient privileges.
I wrote the package as SYSTEM.
The user can execute the package. It fails.
I granted execute on DBMS_SQL to the user. Still fails.
I finally tried granting alter user (thus usurping the entire reason I did this)
but it still does not work! When I do 'alter user' at the command line as the
executing user, it works.
Any ideas? I do not see anything different in the doco about the ALTER USER privilege - like if there's another priv I must grant in order for this to work. Below is the guts of my code (it's short). this is driving me BATTY because I'm usually pretty good at PL/SQL.
Any suggestions or ideas are appreciated.
Thanks
Lisa
CREATE OR REPLACE PACKAGE BODY XX
AS
PROCEDURE CHANGE_PASSWORD (in_user_id IN VARCHAR2,
in_new_pw IN VARCHAR2, out_text OUT VARCHAR2)IS
user_does_not_exist EXCEPTION; PRAGMA EXCEPTION_INIT (user_does_not_exist, -1918); invalid_password EXCEPTION; PRAGMA EXCEPTION_INIT (invalid_password, -988); cursor_handle INTEGER; return_value INTEGER; BEGIN cursor_handle:=DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE ( cursor_handle, 'ALTER USER ' || in_user_id || ' IDENTIFIED BY '|| in_new_pw, DBMS_SQL.NATIVE); return_value:=DBMS_SQL.EXECUTE(cursor_handle); DBMS_SQL.CLOSE_CURSOR(cursor_handle); EXCEPTION WHEN invalid_password THEN DBMS_SQL.CLOSE_CURSOR(cursor_handle); out_text:='New password is not valid. For example,password can not start with a number.';
WHEN user_does_not_exist THEN DBMS_SQL.CLOSE_CURSOR(cursor_handle); out_text:='User currently does not exist in thedatabase.';
WHEN OTHERS THEN DBMS_SQL.CLOSE_CURSOR(cursor_handle); out_text:='Database error:' || TO_CHAR(SQLCODE) || ' ' || SUBSTR(SQLERRM,1,25);Received on Mon May 22 2000 - 10:10:33 CDT
![]() |
![]() |