dba:create_db_link_other_schema
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
dba/create_db_link_other_schema.txt · Zuletzt geändert: 2014/04/08 20:05 von gpipperr