Es gibt Themen und Inhalte, die auch nach Jahren ihre Aktualität und Relevanz nicht verlieren. Deshalb freuen wir uns, dir heute einen unserer beliebten Beiträge aus dem Jahr 2021 erneut und frisch aufgemöbelt zu präsentieren. Warum? Weil die darin enthaltenen Informationen und Erkenntnisse nach wie vor genauso wichtig und wertvoll sind wie damals. Es geht um den Oracle Secure External Password Store (kurz: SEPS).
Oracle adressiert mit dem Secure External Password Store das allseits präsente Problem, dass Logindaten für den Datenbankzugriff im Klartext lesbar in Scripts und Configfiles abgelegt sind. Er erlaubt es, Logincredentials in Oracle Wallets zu speichern und somit gegen all zu leichten Zugriff von außen zu schützen.
Ein Eintrag im Secure External Password Store besteht aus drei Teilen:
Welche Schritte für die Einrichtung und Nutzung eines Secure External Password Stores erforderlich sind und wie wir das Ganze bewerten, liest du in dem folgenden Beitrag.
Für das Anlegen des Password Stores verwendet man bis Verison 11.1 ausschließlich das Secret Store Tool „mkstore“:
mkstore -wrl /pfad/zum/wallet -create
Ab 11.2 wird empfohlen, den Password Store mit dem Wallet-Tool „orapki“ anzulegen. Die dort neu hinzugekommene Option ‑auto_login_local verhindert laut Oracle, dass ein gestohlener Password Store von einem anderen User oder auf einem anderen Computer missbräuchlich verwendet werden kann. Warum das so leider nicht stimmt, wird gegen Ende des Artikels in der Bewertung erklärt. Der entsprechende Befehl wäre:
orapki wallet create -wallet /pfad/zum/wallet -auto_login_local
Legen wir also einen Password Store an und füllen ihn mit Credentials. Der Password Store ist übrigens immer mit einem Kennwort geschützt, das beim Erstellen des Store festgelegt wird. Man benötigt es sowohl für Schreibzugriffe als auch zum Auflisten des Inhaltes. Der Zugriff auf die Credentials für die Verbindung zu einer Datenbank erfolgt hingegen durch ein implizites Autologin.
[oracle@client(orcl) wallets]$ mkstore -wrl /u01/app/oracle/product/19.0.0/client_1/owm/wallets/seps -create Oracle Secret Store Tool Release 19.0.0.0.0 - Production Version 19.4.0.0.0 Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. Enter password: Enter password again:
Wie bereits erwähnt, besteht jeder Eintrag im Password Store aus einem Triple von Connectdescriptor, Username und Kennwort. Ein Password Store kann mehrere Credentials aufnehmen. Welcher dieser Einträge letztlich für die Anmeldung an der Datenbank gezogen wird, richtet sich nach dem Connectdescriptor. Der Wert, der als Connect zur Datenbank verwendet wird, ist gleichzeitig auch der Credential-Index im Password Store. Da es sich dabei um reines Stringmatching handelt, steht dem Benutzer frei, ob er für die Einträge im Password Store Net Service Names oder ausformulierte Connectstrings verwendet. Auch die Verwendung der ezconnect-Syntax ist möglich.
Wichtig ist nur, dass dann auch beim Connect zur Datenbank der richtige Net Service Name bzw. der bis hin zu Leerzeichen etc. exakt übereinstimmende Connectstring verwendet werden. Aufgrund der wesentlich besseren Lese- und Wartbarkeit sollte natürlich dem Net Service Name gegenüber dem ausformulierten Connectstring der Vorzug gegeben werden. Müssen in ein und dem selben Password Store unterschiedliche Credentials für die selbe Datenbank abgelegt werden, muss natürlich zwangsläufig für jedes Credential ein separater Net Service Name angelegt werden, da nur über den Net Service Name der richtige Username angesprochen werden kann.
mkstore -wrl /pfad/zum/wallet \
-createCredential Connectdescriptor Username [Kennwort]
Wir hinterlegen z.B. den User OE mit dem Kennwort „oe“ folgendermaßen (der Net Service Name ORCL4OE wird weiter unten eingerichtet):
[oracle@client(orcl) wallets]$ mkstore \ -wrl /u01/app/oracle/product/19.0.0/client_1/owm/wallets/seps \
-createCredential ORCL4OE oe oe Oracle Secret Store Tool Release 19.0.0.0.0 - Production Version 19.4.0.0.0 Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. Enter wallet password: Create credential oracle.security.client.connect_string1
Das Kennwort muss nicht zwingend an der Console angegeben werden. Es wird bei Bedarf auch abgefragt und kann verborgen eingegeben werden. Ebenso kann ein Connectstring anstelle eines Net Service Names verwendet werden. Wirklich übersichtlich ist das dann aber nicht mehr.
[oracle@client(orcl) wallets]$ mkstore \ -wrl /u01/app/oracle/product/19.0.0/client_1/owm/wallets/seps \ -createCredential '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))' foo Oracle Secret Store Tool Release 19.0.0.0.0 - Production Version 19.4.0.0.0 Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. Your secret/Password is missing in the command line Enter your secret/Password: Re-enter your secret/Password: Enter wallet password: Create credential oracle.security.client.connect_string2
Hat man Net Service Names als Credentialindex gewählt, müssen die entsprechenden Net Service Names natürlich in der tnsnames.ora des Clients konfiguriert werden.
ORCL4OE =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = dbserver)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
Über die sqlnet.ora des Clients wird die Nutzung des Secure External Password Store (SEPS) nun noch mittels folgender beider Einträge aktiviert.
wallet_location =
(SOURCE=
(METHOD=File)
(METHOD_DATA=/u01/app/oracle/product/11.2.0/client_1/owm/wallets/seps
(DIRECTORY=)
)
)
SQLNET.WALLET_OVERRIDE=TRUE
Wallet_location weist den Weg zum Password Store und wallet_override verhindert, dass der Client versucht, das Wallet für eine SSL-Authentisierung zu verwenden.
Damit sind alle Voraussetzungen erfüllt, um zukünftig ohne explizite Angabe eines Kennwortes eine Verbindung zur Datenbank herzustellen:
[oracle@client(orcl) wallets]$ sqlplus /@orcl4oe SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 25 13:38:07 2023 Version 19.10.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.10.0.0.0 SQL> show user USER is "OE" SQL>
[oracle@client(orcl) ~]$ sqlplus
/@'(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))' SQL*Plus: Release 19.0.0.0.0 - Production on Tue Jul 25 13:38:07 2023 Version 19.10.0.0.0 Copyright (c) 1982, 2019, Oracle. All rights reserved. Connected to: Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production Version 19.10.0.0.0 SQL> show user USER is "FOO" SQL>
Ändert sich das Passwort eines Datenbanknutzers, muss die Änderung natürlich auch entsprechend im Passwort Store erfolgen:
SQL> alter user oe identified by "oracle"; User altered. [oracle@client(orcl) ~]$ mkstore \ -wrl /u01/app/oracle/product/19.0.0/client_1/owm/wallets/seps \ -modifyCredential ORCL4OE orcl oracle
Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. Enter wallet password: Modify credential Modify 1
Den Inhalt eines Password Stores lässt man sich mit der ‑listCredential Option auflisten:
[oracle@client(orcl) ~]$ mkstore \ -wrl /u01/app/oracle/product/19.0.0/client_1/owm/wallets/seps \ -listCredential Oracle Secret Store Tool Release 19.0.0.0.0 - Production
Version 19.4.0.0.0
Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. Enter wallet password: List credential (index: connect_string username)
2: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=dbserver)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl))) foo
1: ORCL4OE orcl
Oracle verspricht mit dem Einsatz des Secure External Password Store einen deutlichen Sicherheitsgewinn, da Passworte nun nicht mehr im Klartext abgelegt sind. Zudem soll das Deployment von Logininformationen einfacher sein. Beides ist grundsätzlich richtig. Nichts desto trotz sollte man bei aller Euphorie Folgendes im Hinterkopf behalten:
Der Oracle Secure External Password Store bietet eine Möglichkeit, Klartext-Credentials aus Scripts und Configfiles zu verbannen und damit ein Plus an Sicherheit zu erreichen. Ein merklicher Vorteil ist die Tatsache, dass Credentials auf diese Art nicht mehr in Anwendungscode hinterlegt werden müssen und damit z.B. außerhalb des Zugriffs von Anwendungsentwicklern bleiben können. Auch das Ausspähen von Passworten aus Filesystembackups kann so unterbunden werden. Allerdings stellen auch die Password Stores ein riskantes Angriffsziel dar und müssen ebenso gut wie Klartext-Credentials gegen Diebstahl gesichert werden. Ein Zugang zu einem Computer in einer Form, die das Auslesen von Klartext-Credentials ermöglichte, erlaubt auch den Diebstahl des Password Stores.
Gemäß MOS Doc ID 340559.1 ist der Oracle Secure Password Store kostenfrei in allen Datenbankeditionen verfügbar:
„The feature Secure External Password Store can be used without any restriction in all product editions, you do not require a license for the Advanced Security Option (ASO).“
Share this article