Ein privater DB kann NICHT direkt in einem anderen als den eigenen Schema angelegt werde.
Aufgabe:
Es soll aber ein DB Link auf die Produktion unter dem Schema ANWENDER_A angelegt werden. Das Passwort vom User ANWENDER_A ist aber nicht bekannt.
Workaround:
Ausnützen der PL/SQL Eigenschaft, dass ein unter einem User erzeugte Procedure unter dem Account das User ausgeführt wird der die Procedure besitzt!
DB Link normal erstellen und im eigenen Schema testen
CREATE DATABASE link temp_test CONNECT TO prod_user IDENTIFIED BY "prodpwdkomplex" USING 'prd_db_alias'; SELECT * FROM dual@TEMP_TEST;
CREATE OR REPLACE PROCEDURE ANWENDER_A.create_a_db_link AS BEGIN EXECUTE IMMEDIATE 'create database link temp_test connect to prod_user identified by "prodpwdkomplex" using ''prd_db_alias'''; END create_a_db_link; /
GRANT CREATE DATABASE link TO ANWENDER_A;
EXEC ANWENDER_A.create_a_db_link # testen mit SELECT owner,db_link FROM dba_db_links;
# Rechte wieder entfernen REVOKE CREATE DATABASE link FROM ANWENDER_A; #Procedure löschen DROP PROCEDURE ANWENDER_A.create_a_db_link