Benutzer-Werkzeuge

Webseiten-Werkzeuge


dba:create_db_link_other_schema

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!

  1. DB Link Eigenschaften, User / Password und Connectstring definieren und validieren
    1. wie auf der DB Maschine per SQL*Plus mit den gleichen Verbindungsparameter anmelden
  2. Anlegen einer Procedure im Schema des Users, der den privaten DB Link benötigt
  3. Recht zum Anlegen eines DB Links erteilen
  4. Procedure ausführen
  5. Prüfen ob der Link existiert
  6. Rechte entfernen und Procedure wieder löschen

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

Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
dba/create_db_link_other_schema.txt · Zuletzt geändert: 2014/04/08 20:05 von gpipperr