1. Start
  2. Unternehmen
  3. Blog
  4. Passworte in Skripten verstecken

Passworte in Skripten verstecken

Im Datenbankumfeld ist die Verwendung von Skripten praktisch Alltag, sei es zur Überwachung oder im Applikationsumfeld um Daten zu laden oder ähnliches. Damit sich die Skripte zur Datenbank verbinden können, werden Anmeldedaten benötigt. Solange das Skript unter einem Nutzer läuft, der der "dba"-Gruppe angehört, oder unter Windows eben Mitglied in der "ORA_DBA"-Gruppe ist, kann man die Anmeldung einfach per "/ as sysdba" realisieren. Somit steht zumindest weder Nutzername noch Passwort im Klartext im Skript. Was aber tun, wenn sich das Skript nicht gleich mit den maximalen Privilegien von SYS anmelden oder das Skript generell von anderer Stelle ausgeführt werden soll? Die einfache Lösung ist dann oft, einfach Benutzer und Passwort im Klartext in die Skripte einzubauen. Dann kann aber natürlich jeder mit Leserechten auf das Skript die Anmeldedaten auslesen was ein nicht unerhebliches Sicherheitsrisiko darstellt.

Die bessere Lösung ist die Verwendung eines Wallets. Normalerweise kennt man Wallets aus dem Umfeld der Transparent Data Encryption (TDE), die Teil der Advanced Security Option ist. Man kann Wallets aber auch zur Speicherung von Anmeldedaten verwenden, und das laut dem Licensing Guide in allen Editionen der Oracle Datenbank.

In einem Wallet können die Anmeldedaten, also Benutzer und Passwort, zu einem beliebigen Connect String hinterlegt werden. Nun aber zu den Schritten, die zur Einrichtung nötig sind. Zuerst sollten einige Verzeichnisse angelegt werden. Ein Verzeichnis dient zur Ablage des eigentlichen Wallets, ein weiteres Verzeichnis wird die SQLNET.ORA und TNSNAMES.ORA aufnehmen um die vorhandene Konfiguration nicht zu stören.

 

C:\Users\marco.mischke>mkdir skripte\wallet

C:\Users\marco.mischke>mkdir skripte\TNSADMIN

 

  Als nächstes kann das Wallet im neu erstellten Verzeichnis erstellt werden.

 

C:\Users\marco.mischke>mkstore -wrl C:\marco.mischke\skripte\wallet -create
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
19.3.0.0.0 : Version {1}
Copyright (c) 2004, 2019, Oracle und/oder der verbundenen Unternehmen. All rights reserved. Alle Rechte vorbehalten.

Kennwort eingeben:
Kennwort erneut eingeben:

 

Nun können beliebige Anmeldedaten in das Wallet gespeichert werden. Der Connect String wird dabei als erster Parameter übergeben, der Benutzername als zweiter Parameter. Dann wird zunächst das Passwort des Datenbankbenutzers erfragt, zum Eintragen in das Wallet wird dann auch noch das Wallet Passwort benötigt.

 

C:\Users\marco.mischke>mkstore -wrl C:\marco.mischke\skripte\wallet -createCredential pdbmmi marco
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
19.3.0.0.0 : Version {1}
Copyright (c) 2004, 2019, Oracle und/oder der verbundenen Unternehmen. All rights reserved. Alle Rechte vorbehalten.

Ihr Schlüssel/Kennwort fehlt in der Befehlszeile
Geben Sie Ihren Schlüssel/Ihr Kennwort ein:
Geben Sie Ihren Schlüssel/Ihr Kennwort erneut ein:
Wallet-Kennwort eingeben:

 

Damit ist das Wallet soweit vorbereitet. Jetzt muss der Client noch so konfiguriert werden, dass er das Wallet auch verwendet. Dazu setzt man den Parameter WALLET_LOCATION so, dass er auf das Wallet-Verzeichnis zeigt. Außerdem ist der Parameter SQLNET.WALLET_OVERRIDE erforderlich. Damit verwendet der CLient das konfigurierte Wallet um die Anmeldedaten zu ermitteln.

 

C:\Users\marco.mischke>type skripte\TNSADMIN\sqlnet.ora
SQLNET.WALLET_OVERRIDE=TRUE
WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=c:\users\marco.mischke\Skripte\wallet)))

 

Nun wird noch der Eintrag für "pdbmmi" in der TNSNAMES.ORA benötigt, damit die Verbindung am Ende auch funktioniert.

 

C:\Users\marco.mischke>type skripte\TNSADMIN\tnsnames.ora
pdbmmi=
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=vm121.support.robotron.de)(PORT=1521))
    (CONNECT_DATA=(SERVICE_NAME=pdbmmi))
  )

 

Damit der Client die neue SQL*Net-Konfiguration verwendet, wird die Umgebungsvariable TNS_ADMIN entsprechend auf das Verzeichnis gesetzt.

 

C:\Users\marco.mischke>set TNS_ADMIN=c:\Users\marco.mischke\skripte\TNSADMIN

 

Nun kann man sich ohne Angabe von Benutzer oder Passwort an der Datenbank anmelden indem einfach nur ein "/" dem Connect String vorangestellt wird.

 

C:\Users\marco.mischke>sqlplus /@pdbmmi

SQL*Plus: Release 19.0.0.0.0 - Production on Di Mai 24 13:57:09 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Letzte erfolgreiche Anmeldezeit: Di Mai 24 2022 13:57:01 +02:00

Verbunden mit:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL> show user
USER ist "MARCO"

SQL> select host_name from v$instance;

HOST_NAME
----------------------------------------
vm121.support.robotron.de

 

Es muss nicht zwingend ein TNSNAMES-Alias verwendet werden. In das Wallet können praktisch beliebige Connect Strings eingetragen werden. Eine Easy Connect Verbindung funktioniert daher genauso.

 

C:\Users\marco.mischke>mkstore -wrl C:\Users\marco.mischke\skripte\wallet -createCredential vm121.support.robotron.de:1521/pdbmmi marco
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
19.3.0.0.0 : Version {1}
Copyright (c) 2004, 2019, Oracle und/oder der verbundenen Unternehmen. All rights reserved. Alle Rechte vorbehalten.

Ihr Schlüssel/Kennwort fehlt in der Befehlszeile
Geben Sie Ihren Schlüssel/Ihr Kennwort ein:
Geben Sie Ihren Schlüssel/Ihr Kennwort erneut ein:
Wallet-Kennwort eingeben:

C:\Users\marco.mischke>sqlplus marco/marco@vm121.support.robotron.de:1521/pdbmmi

SQL*Plus: Release 19.0.0.0.0 - Production on Mi Mai 25 08:42:47 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Letzte erfolgreiche Anmeldezeit: Mi Mai 25 2022 08:24:06 +02:00

Verbunden mit:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL>

 

Um den Überblick über die gespeicherten Anmeldedaten zu behalten, können mit der Option "-listCredential" die gespeicherten Anmeldedaten angezeigt werden.

 

C:\Users\marco.mischke>mkstore -wrl C:\Users\marco.mischke\skripte\wallet -listCredential
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
19.3.0.0.0 : Version {1}
Copyright (c) 2004, 2019, Oracle und/oder der verbundenen Unternehmen. All rights reserved. Alle Rechte vorbehalten.

Wallet-Kennwort eingeben:
List credential (index: connect_string username)
2: vm121.support.robotron.de:1521/pdbmmi marco
1: pdbmmi marco

 

Zum Löschen nicht mehr benötigter Anmeldedaten dient die Option "-deleteCredential".

 

C:\Users\marco.mischke>mkstore -wrl C:\Users\marco.mischke\skripte\wallet -deleteCredential pdbmmi
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
19.3.0.0.0 : Version {1}
Copyright (c) 2004, 2019, Oracle und/oder der verbundenen Unternehmen. All rights reserved. Alle Rechte vorbehalten.

Wallet-Kennwort eingeben:

 

 Auf diese Art können also beliebige Anmeldedaten für verschiedene Datenbanken sicher abgelegt und von Skripten verwendet werden ohne, dass die Daten irgendwo im Klartext ersichtlich sind.

Einziger Nachteil dieser Methode ist die Tatsache, dass es pro Connect String nur genau ein Benutzername hinterlegt werden kann. Sollen also mehrere Anmeldedaten für ein und dieselbe Datenbank gespeichert werden, müssen verschiedene Connect Stings verwendet werden. Am einfachsten geht das, indem mehrere TNS-Aliase für die gleiche Datenbank verwendet werden. Hierfür kann man sich eines Tricks bedienen, denn man kann einfach eine Kommaliste verwenden.

 

C:\Users\marco.mischke>type skripte\TNSADMIN\tnsnames.ora
pdbmmi, pdbmmi_system =
  (DESCRIPTION=
    (ADDRESS=(PROTOCOL=tcp)(HOST=vm121.support.robotron.de)(PORT=1521))
    (CONNECT_DATA=(SERVICE_NAME=pdbmmi))
  )

C:\Users\marco.mischke>mkstore -wrl C:\Users\marco.mischke\skripte\wallet -createCredential pdbmmi_system system
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
19.3.0.0.0 : Version {1}
Copyright (c) 2004, 2019, Oracle und/oder der verbundenen Unternehmen. All rights reserved. Alle Rechte vorbehalten.

Ihr Schlüssel/Kennwort fehlt in der Befehlszeile
Geben Sie Ihren Schlüssel/Ihr Kennwort ein:
Geben Sie Ihren Schlüssel/Ihr Kennwort erneut ein:
Wallet-Kennwort eingeben:

C:\Users\marco.mischke>sqlplus /@pdbmmi_system

SQL*Plus: Release 19.0.0.0.0 - Production on Mi Mai 25 11:17:24 2022
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.

Letzte erfolgreiche Anmeldezeit: Di Apr 05 2022 15:13:19 +02:00

Verbunden mit:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.13.0.0.0

SQL> 

 

Die Verwendung eines Wallets ist somit eine einfache und flexible Variante um die Sicherheit im Umfeld der Datenbankskripte deutlich zu erhöhen wobei die Einrichtung schnell erledigt ist. Natürlich muss das Wallet nun entsprechend vor Diebstahl gesschützt werden, denn um die Anmeldedaten zu verwenden, muss das Wallet-Passwort nicht bekannt sein. Das Wallet-Passwort wird eben nur zum Anzeigen und Ändern der Anmeldedaten im Wallet benötigt.

Kommentare

|

Hallo Herr Brilla,

danke für das Feedback, die Befehle sind nun vollständig.

|

Sehr hilfreicher Beitrag, vielen Dank!

Kleiner Hinweis: Bei den ersten beiden mkstore-Befehlen, fehlt die erste Hälfte des Befehls.

Kommentar schreiben

* Diese Felder sind erforderlich