Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle

Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle
Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle

Σε αυτό το άρθρο θα αναλύσουμε τον τρόπο που μπορούμε να έχουμε πρόσβαση σε πίνακες / views που βρίσκονται σε απομακρυσμένη βάση δεδομένων της Oracle. Για να το πετύχουμε αυτό χρειαζόμαστε να φτιάξουμε ένα object που ονομάζεται Database Link.

Με τη χρήση Database Link μπορούμε να καλούμε πίνακες και views που βρίσκονται σε άλλη βάση δεδομένων σε queries προσθέτοντας στο τέλος “@” και το όνομα του Database Link. Εκτός από SELECT μπορούμε να κάνουμε και INSERT, UPDATE, DELETE στους πίνακες αυτούς.

Η προετοιμασία

Για αρχή πρέπει να πάμε στον φάκελο που βρίσκεται το αρχείο tnsnames.ora στον τοπικό server μας. Σε αυτό το αρχείο βρίσκονται οι δικτυακές ρυθμίσεις που απαιτούνται για να συνδεθεί ένας χρήστης στη βάση δεδομένων της Oracle.

cd $ORACLE_HOME/network/admin
Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle
01

Κάνοντας edit το αρχείο θα πρέπει κάτω από την εγγραφή για την τρέχων μας βάση (ORCL) να προσθέσουμε και μία εγγραφή για την απομακρυσμένη που θέλουμε να συνδεθούμε (REMOTEDB). Εκεί θα πρέπει να ορίσουμε Host,Port και ως Service_name το όνομα της βάσης / service που θέλουμε να συνδεθούμε.

*Επειδή για τον παράδειγμα δεν είχα κάποιο άλλο instance έβαλα μία εγγραφή με το ίδιο.

vi $ORACLE_HOME/network/admin/tnsnames.ora
Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle
02

Στην απομακρυσμένη βάση θα πρέπει να έχουμε φτιάξει έναν χρήστη που θα έχει δικαίωμα να συνδέεται , μαζί με ότι άλλο δικαίωμα θέλουμε σε συγκεκριμένα objects να βλέπουμε.

Στην περίπτωση μας θα δώσουμε δικαίωμα select σε έναν μόνο πίνακα:

-- Create the user 
create user dblink_user
  identified by password
  default tablespace USERS
  temporary tablespace TEMP
  profile DEFAULT;
-- Grant/Revoke role privileges 
grant connect to dblink_user;
grant resource to dblink_user;

grant select on scott.dept to dblink_user;

Δημιουργία Public Database Link

Στην τοπική μας βάση θα δημιουργήσουμε το Public Database Link. Το Public σημαίνει ότι μπορεί να γίνει χρήση από οποιονδήποτε χρήστη της βάσης δεδομένων.

Θα χρειαστεί στο connect να ορίσουμε τα credentials του χρήστη που φτιάξαμε πριν στην απομακρυσμένη βάση και στο using την εγγραφή στο tnsnames.ora που προσθέσαμε:

create public database link REMOTEDB
connect to dblink_user identified by password
using 'REMOTEDB'; 
--drop public database link REMOTEDB;

Αν κάνουμε select το view dba_db_links, θα δούμε το database link που φτιάξαμε:

select * from dba_db_links;
Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle
03

Είμαστε έτοιμοι να δοκιμάσουμε το query στον πίνακα, το μόνο που χρειάζεται είναι μετά το όνομα του πίνακα να προσθέσουμε με “@” το όνομα του database link:

select * from scott.dept@REMOTEDB;
Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle
04

Αν προσπαθήσουμε να προσπελάσουμε άλλον πίνακα που δεν έχει πρόσβαση ο απομακρυσμένος χρήστης που φτιάξαμε το database link (dblink_user), τότε θα επιστρέψει σφάλμα:

select * from scott.bonus@REMOTEDB;
Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle
05

Δημιουργία Private Database Link

Επειδή όμως δεν είναι ασφαλές να μπορεί οποιοδήποτε χρήστης σε μία βάση να έχει πρόσβαση σε ένα database link μπορούμε να φτιάξουμε database link που να λειτουργεί μόνο σε συγκεκριμένο χρήστη.

Για αρχή θα πρέπει να δώσουμε το δικαίωμα CREATE DATABASE LINK στον χρήστη που θα θέλουμε να κάνει χρήση το database link:

grant CREATE DATABASE LINK to stratos;

Έπειτα συνδεόμαστε ώς αυτός ο χρήστης (π.χ. connect stratos/password) και δημιουργούμε το database link όπως πριν χωρίς την λέξη PUBLIC:

create database link REMOTEDB_FROM_STRATOS
connect to dblink_user identified by password
using 'REMOTEDB'; 
--drop database link REMOTEDB_FROM_STRATOS

Αν τώρα ξανακάνουμε select το παρακάτω view με sysdba χρήστη θα δούμε ότι έχουμε δύο database link, το ένα ανήκει στον PUBLIC και το άλλο στον χρήστη που φτιάξαμε:

select * from dba_db_links;
Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle
06

Οπότε συνδεδεμένοι ως αυτός ο χρήστης αν τρέξουμε το query με το δικό του database link θα λειτουργήσει κανονικά:

select * from scott.dept@REMOTEDB_FROM_STRATOS;
Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle
07

Αν προσπαθήσουμε να τρέξουμε το ίδιο query με οποιονδήποτε άλλο χρήστη, θα λάβουμε το σφάλμα με το παρακάτω μήνυμα:

Πώς μπορούμε να έχουμε απομακρυσμένη πρόσβαση σε άλλη βάση δεδομένων της Oracle
08

Πηγές:

Μοιράσου το

Αφήστε μία απάντηση