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