===== Einen DB Link in einem anderem Schema anlegen =====
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 Eigenschaften, User / Password und Connectstring definieren und validieren
- wie auf der DB Maschine per SQL*Plus mit den gleichen Verbindungsparameter anmelden
- Anlegen einer Procedure im Schema des Users, der den privaten DB Link benötigt
- Recht zum Anlegen eines DB Links erteilen
- Procedure ausführen
- Prüfen ob der Link existiert
- Rechte entfernen und Procedure wieder löschen
=== DB Link Eigenschaften, User / Password und Connectstring definieren ===
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;
=== Hilfsfunktion erstellen ===
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;
/
=== Rechte vergeben ===
grant create database link to ANWENDER_A;
=== Procedure aufrufen ===
exec ANWENDER_A.create_a_db_link
# testen mit
select owner,db_link from dba_db_links;
=== Aufräumen ===
# Rechte wieder entfernen
revoke create database link from ANWENDER_A;
#Procedure löschen
drop procedure ANWENDER_A.create_a_db_link
=== Quellen ====
http://oraganism.wordpress.com/2009/12/02/how-to-create-a-database-link-in-another-users-schema/