ユーザー (この場合は dba) がデータベースを選択し、ユーザー名とパスワードを変更できるフォームを APEX に実装しようとしています。
入力フィールドを正しく設定できましたが、実際のデータベースと結び付ける方法がまったくわかりません。異なるデータベースにアクセスするには、データベース リンクを使用する必要があると想定しています。
これは可能ですか?
ユーザー (この場合は dba) がデータベースを選択し、ユーザー名とパスワードを変更できるフォームを APEX に実装しようとしています。
入力フィールドを正しく設定できましたが、実際のデータベースと結び付ける方法がまったくわかりません。異なるデータベースにアクセスするには、データベース リンクを使用する必要があると想定しています。
これは可能ですか?
私はあなたがこのようなことをすることができるとは思わない:
alter user xyz@remote_database identified by new_password
おそらく、ユーザー名とパスワードを受け取り、そのユーザーのパスワードを変更するストアド プロシージャをリモート データベースに記述する必要があります。次に、次を実行できます。
begin
change_password('xyz','new_password')@remote_database;
end;
私は、ストアド プロシージャや昇格されたアクセスを 1 人のユーザーに必要としないソリューションを考案しました。一緒に少しハッキングされていますが、うまくいきます!
ユーザーは、通常の APEX フォームを使用して資格情報と必要な新しいパスワードを入力します。
フォーム データは、置換文字列を使用して iframe を含む HTML 領域で処理されます。すなわち:<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