News zu Oracle

DBA Tipp: Arbeiten mit Da­ten­banklinks? Aber sicher!

Da­ten­banklinks sind aus DBA-Sicht ein her­vor­ra­gen­des Werkzeug, wenn es darum geht, aus einer Oracle Datenbank direkt auf Daten in einer anderen Oracle-Datenbank zu­zu­grei­fen. Aus tech­ni­scher Sicht ist ein Zugriff über einen Da­ten­banklink nichts anderes als eine Client-Server-Sitzung, in der die entfernte Datenbank den Server darstellt und die Datenbank, in welcher der Link definiert ist, als Client fungiert. Folglich muss in der De­fi­ni­ti­on des Links hin­ter­legt sein, mit welchen Cre­den­ti­als sich dieser an der ent­fern­ten Datenbank anmeldet. Aus diesem Grund sind sie dem Si­cher­heits­be­auf­trag­ten re­gel­mä­ßig ein Dorn im Auge.

Zugewinn an Si­cher­heit und Wartbarkeit

Was aber, wenn sich die Si­cher­heit und Wart­bar­keit von Zugriffen über Da­ten­banklinks ohne großen Aufwand erhöhen ließe? Um das zu erklären tauchen wir noch etwas tiefer in die Materie ein. Man un­ter­schei­det folgende zwei Link-Typen:

  • fixed user database link: Die Ac­count­da­ten (Username, Passwort) für die Anmeldung an der ent­fern­ten Datenbank sind in der Link­de­fi­ni­ti­on abgelegt.
  • connected user database link: Mit den Cre­den­ti­als des lokal an­ge­mel­de­ten Users wird eine Ver­bin­dung zum gleich­na­mi­gen User auf der ent­fern­ten Datenbank her­ge­stellt. Der Benutzer auf der lokalen Datenbank muss folglich mit gleichem Namen und Passwort auch in der ent­fern­ten Datenbank existieren.


Beiden Linktypen ist ein er­heb­li­ches Problem gemeinsam. Wird das Kennwort des Linkziels auf der ent­fern­ten Seite geändert, muss auch das Kennwort auf der lokalen Seite geändert werden. An­dern­falls ist keine Ver­bin­dung mehr über diesen Da­ten­banklink möglich. Er­schwe­rend kommt der Umstand hinzu, dass Kennworte in fixed user database links nicht geändert werden können. Solche Links müssen gelöscht und mit ge­än­der­tem Kennwort neu angelegt werden. Nicht selten stehen dem Ver­füg­bar­keits­an­for­de­run­gen entgegen. Aufgrund der er­heb­li­chen Re­strik­tio­nen wird das Kennwort der Link-Benutzer in der Praxis zu selten bis gar nicht geändert. Daraus kann ein er­heb­li­ches Si­cher­heits­pro­blem re­sul­tie­ren, da ins­be­son­de­re der Account auf der ent­fern­ten Seite tat­säch­lich Zugriff auf unter Umständen sensible Da­ten­bank­ob­jek­te hat. Damit wäre er ein typischer Kandidat für sehr re­strik­ti­ve Passwort-Policies und häufigen Passwortwechsel.

Einsatz der Proxy Au­then­ti­ca­ti­on als Lösung

Das ge­schil­der­te Problem lässt sich durch Einsatz der Proxy Au­then­ti­ca­ti­on umgehen. Kernpunkt dieses Konzeptes ist es, dass sich ein Benutzer nicht mehr mit seinen eigenen Cre­den­ti­als bei einer Datenbank anmeldet, sondern dafür die Cre­den­ti­als eines anderen Accounts mit nur minimalen Pri­vi­le­gi­en nutzt.

Wie kann uns dieser Me­cha­nis­mus nun helfen, den War­tungs­auf­wand für Da­ten­banklinks zu re­du­zie­ren und sie so ein wenig sicherer zu machen?

Ein Beispiel: Wir benötigen im Schema XY einer lokalen Datenbank Zugriff auf das OE-Schema einer ent­fern­ten Datenbank. Die her­kömm­li­che Ver­fah­rens­wei­se wäre, einen fixed user database link im XY-Schema anzulegen, der die OE-Cre­den­ti­als der ent­fern­ten Datenbank abspeichert.

SQL local-db> CREATE DATABASE LINK remote_oe CONNECT TO oe IDENTIFIED BY "volatile_password" USING 'remote_db';

Database link created.

SQL local-db> SELECT SUM(order_total) FROM orders@remote_oe;

SUM(ORDER_TOTAL)
----------------
       3668054.7
Wird auf der ent­fern­ten Datenbank das Kennwort des OE-Users geändert, ist der Link al­ler­dings nicht mehr ver­wend­bar, müsste gelöscht und mit dem neuen Kennwort neu angelegt werden. 
SQL remote-db> ALTER USER oe IDENTIFIED BY "a_new_password";

User altered.

SQL remote-db>


SQL local-db> SELECT SUM(order_total) FROM orders@remote_oe;
SELECT SUM(ORDER_TOTAL) FROM ORDERS@REMOTE_OE
                                    *
ERROR at line 1:
ORA-01017: invalid username/password; logon denied
ORA-02063: preceding line from REMOTE_OE

SQL local-db>
Anders sieht die Ver­fah­rens­wei­se bei Ver­wen­dung der Proxy Au­then­ti­ca­ti­on aus. Man erstellt auf der Remote-Datenbank einen Proxy User mit einem hin­rei­chend sicheren Passwort und weist ihm lediglich die CONNECT-Rolle zu. Mehr Rechte benötigt ein Proxy User nicht. 
SQL remote-db> CREATE USER proxy_user IDENTIFIED BY "very_secure_password";

User created.

SQL remote-db> GRANT connect TO proxy_user;

Grant succeeded.

SQL remote-db>
Zu­sätz­lich vergibt man dem ent­fern­ten OE-User das Privileg, sich über den dort ein­ge­rich­te­ten Proxy-User anzumelden. 
SQL remote-db> ALTER USER oe GRANT CONNECT THROUGH proxy_user;

User altered.

SQL remote-db>

Der Da­ten­banklink auf der lokalen Seite wird nun für Proxy Au­then­ti­sie­rung ein­ge­rich­tet. Beachten Sie dabei, dass im Link jetzt nicht mehr das Kennwort des sensiblen OE-Schemas, sondern das Kennwort des minimal pri­vi­le­gier­ten Proxy-Accounts ge­spei­chert wird. Proxy Au­then­ti­sie­rung wird durch das Ac­count­kon­strukt „foo[bar]“ an­ge­spro­chen, in dem aus­ge­drückt wird, dass sich der User „bar“ mit den Cre­den­ti­als des Users „foo“ anmeldet.

SQL local-db> DROP DATABASE LINK remote_oe;

Database link dropped.

SQL local-db> CREATE DATABASE LINK remote_oe CONNECT TO "proxy_user[oe]" IDENTIFIED BY "very_secure_password" USING 'remote_db';


Database link created.

SQL local-db> SELECT SUM(order_total) FROM orders@remote_oe;

SUM(ORDER_TOTAL)
----------------
       3668054.7

Das Kennwort des Users „OE“ auf der Remote-Datenbank kann nun den un­ter­neh­mens­in­ter­nen Passwort-Policies folgend beliebig geändert werden, ohne dass das Einfluss auf den Da­ten­banklink hätte.

Was zu beachten ist

Zwei Schwach­stel­len hat das Konzept trotz des Gewinns an Si­cher­heit und Wart­bar­keit allerdings:

Eine etwaige Änderung des Proxy-User-Kennworts erfordert wie gehabt das Löschen und Neu­an­le­gen des Da­ten­banklinks. Da der Proxy-User jedoch nur über minimale Pri­vi­le­gi­en (idea­ler­wei­se nur connect-Rolle) verfügt, muss sein Kennwort ggf. nur sehr selten, z.B. innerhalb geplanter War­tungs­fens­ter, geändert werden.

Proxy Au­then­ti­sie­rung ist darüber hinaus nicht für connected user database links anwendbar.

Und noch eine Rand­be­mer­kung: Da beim Zugriff auf die Remote-Datenbank nicht das Kennwort des „OE“-Benutzers verwendet wird, funk­tio­niert der Link natürlich auch noch bei ab­ge­lau­fe­nem „OE“-Kennwort. Erst das Sperren des „OE“-Accounts (oder Pass­wort­ab­lauf / Sperre am Proxy-User-Account) sperrt den Zugriff über den Link.

Fazit

Mit Einsatz von Proxy Au­then­ti­ca­ti­on kann die Si­cher­heit und Wart­bar­keit von Zugriffen über Da­ten­banklinks erhöht werden. Häufige Pass­wor­t­än­de­run­gen für Sche­maow­ner (die ein Be­stand­teil einer ver­nünf­ti­gen Si­cher­heits­stra­te­gie sein sollten) wirken sich nicht mehr hin­der­lich auf die Ver­füg­bar­keit der Links aus.

Hier findest du weitere in­ter­es­san­te DBA Tipps oder Posts zum Thema Oracle Datenbank aus unserem News und Insights Bereich. 
icon-arrow_right_medium-violet-blue.svg

Share this article

Facebook 
Twitter 
LinkedIn 
XING 
WhatsApp 
Email