2012-05-29 2 views
2

Я пытаюсь внедрить форму на APEX, которая позволяет пользователю (в данном случае dba) выбирать базу данных, а затем изменять их имя пользователя и пароль.Изменение пароля пароля базы данных Oracle от APEX

Я был в состоянии правильно установить поля ввода, но я полностью потерял, как связать его с фактической базой данных. Я предполагаю, что мне нужно будет использовать ссылку базы данных для доступа к различным базам данных.

Возможно ли это?

ответ

1

Я разработал решение, которое не требует хранимых процедур или повышенного доступа для одного пользователя. Его немного взломали, но он работает!

  1. Пользователь вводит свои учетные данные и новый новый пароль с помощью обычной формы APEX.

  2. Данные формы обрабатываются в области HTML с использованием iframe с использованием строк подстановки. то есть: <iframe height='300' width='100%' scrolling="no" src="http://***SERVER***/cgi-bin/chguserpwd.cgi dbname=&DATABASE_NAME.&username=&USERNAME.&oldpwd=&CURR_PASSWORD.&newpwd=&NEW_PASSWORD."></iframe>

  3. Сценарий CGI выполняет работу и возвращает результат через IFRAME

    #!/usr/bin/ksh 
    my_input=$QUERY_STRING; 
    dbname=`echo "$QUERY_STRING" |awk '{FS="&"} {print $1}'|awk '{FS="="} {print $2}'` 
    username=`echo "$QUERY_STRING" |awk '{FS="&"} {print $2}'|awk '{FS="="} {print $2}'` 
    oldpwd=`echo "$QUERY_STRING" |awk '{FS="&"} {print $3}'|awk '{FS="="} {print $2}'` 
    newpwd=`echo "$QUERY_STRING" |awk '{FS="&"} {print $4}'|awk '{FS="="} {print $2}'` 
    print "Content-Type: text/html\n\n"; print " Database Name is  $dbname ............ User is $username "; 
    
    cd **dir** 
    ./chguserpwd $dbname $username $oldpwd $newpwd  
    
  4. Выполнить SQL из CGI-сценария ./chguserpwd

    set markup HTML on 
    prompt . 
    alter user &1 identified by &2; 
    prompt Password has been changed 
    
2

Я не думаю, что вы будете в состоянии сделать что-то вроде этого:

alter user [email protected]_database identified by new_password 

Вы, вероятно, нужно написать хранимую процедуру на удаленной базе данных, которая принимает имя пользователя и пароль и изменяет этот пароль пользователя для тебя. Затем вы можете выполнить:

begin 
    change_password('xyz','new_password')@remote_database; 
end; 
Смежные вопросы