我正在尝试在APEX上实现一个表单,允许用户(在本例中为dba)选择一个数据库,然后更改其用户名和密码。
我能够正确设置输入字段,但我完全迷失了如何将其与实际数据库联系起来。我假设我将不得不使用数据库链接来访问不同的数据库。
这可能吗?
答案 0 :(得分:2)
我认为你不会做这样的事情:
alter user xyz@remote_database identified by new_password
您可能需要在远程数据库上编写一个接受用户名和密码的存储过程,并为您修改该用户密码。然后你可以执行:
begin
change_password('xyz','new_password')@remote_database;
end;
答案 1 :(得分:1)
我设计了一种解决方案,不需要单个用户的存储过程或提升访问权限。它有点被黑了,但它确实有效!
用户通过常规APEX表单输入其凭据和所需的新密码。
使用替换字符串在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>
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
从cgi-script ./chguserpwd
set markup HTML on
prompt .
alter user &1 identified by &2;
prompt Password has been changed