| 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 the
database.';
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
![]() |
![]() |