Sicher einloggen ohne Benutzername und Passwort
von Heinz-Wilhelm Fabry, ORACLE Deutschland GmbH
Client-Server-Anwendungen und Batch Jobs, aber auch privilegierte Benutzer wie DBAs, die Werkzeuge
wie z.B. SQL*Plus nutzen, loggen sich unter Angabe von Benutzername und Passwort auf Datenbanken ein.
Die Steuerdateien der Batch-Jobs bergen ein gewisses Sicherheitsrisiko, denn sie enthalten häufig
die benötigten Benutzernamen und Passwörter. Und auf UNIX-Systemen kann ausserdem jeder,
der Zugriff auf das System hat, die im Skript enthaltenen bzw. eingegebenen Passwörter in der
Prozessliste im Klartext sehen.
Der folgende Beitrag zeigt, wie sowohl Batch Jobs als auch Benutzer sich durch das Verwenden
sogenannter external password files sicher und ohne Eingabe von Benutzername und Passwort
bei der Datenbank anmelden.
External password files sind ein Feature der Enterprise Edition der Datenbank, sie sind also
im normalen Lieferumfang der Enterprise Edition enthalten. Implementiert wird das Feature über
Einträge in den Dateien sqlnet.ora und tnsnames.ora sowie über ein Wallet.
Dieses Wallet ist das eigentliche external password file - eine kleine, nur wenige KB
große Datei, die mit dem 3DES-Algorithmus verschlüsselt und durch ein Passwort gesichert ist. External password files funktionieren sowohl für
Client-Server-Anwendungen als auch direkt auf dem Server. Das Beispiel unten implementiert sie
auf dem Server.
Vorgehensweise
Mit vier einfachen Schritten richtet man das Verwenden von external password files ein
- Anlegen und Einrichten des Wallet
- Servicenamen in tnsnames.ora eintragen
- Verwendung des Wallet über sqlnet.ora einrichten
- Anpassen von Skripten / Einloggen ohne Passwort
1. Anlegen und Einrichten des Wallet
Im ersten Schritt wird das Wallet selbst in einem beliebigen Verzeichnis des Betriebssystems angelegt,
auf das der Eigentümer der Oracle Software Zugriff hat. In diesem Verzeichnis darf kein anderes Oracle
Wallet gespeichert sein - z.B. kein Wallet, das für die Verschlüsselung von Daten mit dem Feature
transparent data encryption (TDE) der Advanced Security Option verwendet wird. Die
Erklärung für diese Einschränkung ist banal: Alle von Oracle angelegten Wallets tragen den Dateinamen
ewallet.p12, so dass das Anlegen eines Wallet in einem Verzeichnis mit vorhandenem
Wallet dieses vorhandene Wallet überschreiben würde.
Zum Anlegen des Wallet wird das Werkzeug mkstore verwendet. Der Aufruf zum Anlegen könnte
folgendermassen aussehen
Es wird ein Passwort abgefragt, mit dem das Wallet vor unbefugtem Öffnen geschützt wird. Das
Passwort muss aus 8 bis 30 Zeichen bestehen und mindestens ein alphanumerisches sowie ein numerisches Zeichen enthalten.
Das Wallet wird - wie oben bereits angemerkt - mit dem Namen ewallet.p12 angelegt. Ausserdem wird
im selben Verzeichnis eine ebenfalls verschlüsselte Datei namens cwallet.sso angelegt. Diese Datei
enthält das Passwort für das Wallet und wird von Oracle zum Zugriff auf das Wallet genutzt. Das Wallet
wird durch diesen Mechanismus zu einem sogenannten auto open wallet.
Nun können die Einträge gemacht werden, die es später erlauben, sich ohne
Passworteingabe bei der Datenbank anzumelden. Benötigt werden - man könnte fast sagen logischerweise
- ein beliebiger, frei vergebbarer Servicename, der mit einem vorhandenen Servicenamen
identisch sein kann
- ein Benutzername, der in der Datenbank angelegt sein muss
- das in der Datenbank vorhandene Passwort für den angegebenen Benutzernamen
Die Einträge erfolgen wiederum mit mkstore
Im Beispiel ist also scotty der Servicename, scott der allseits bekannte Benutzername.
mkstore reagiert mit einer Eingabeaufforderung nach dem Passwort von Scott. Geht man davon aus,
dass dieses Passwort noch das Standardpasswort der Datenbankinstallation ist (eine schlechte Praxis,
aber hilfreich für diesen Beitrag), gibt man hier also das bekannte Passwort tiger an. Um
Fehleingaben abzufangen wird das Passwort ein zweites Mal abgefragt, dann folgt die Abfrage des
Passwortes für den Zugriff auf das Wallet. Ist alles korrekt angegeben, wird der Eintrag im Wallet
erzeugt. Ausdrücklich sei darauf hingewiesen, dass nach einer Änderung des Passwortes in der Datenbank
das Passwort auch im Wallet geändert werden muss. Dies geschieht ebenfalls über mkstore.
Details dazu und darüber, wie man die im Wallet vorhandenen Einträge auflistet (Passwörter werden
dabei nicht angezeigt), Einträge löscht und Passwörter sowie Servicenamen ändert, liefert das Handbuch
Oracle Database Security Guide).
Ein Benutzername kann auch mit mehreren Servicenamen verbunden werden. Ebenso ist es möglich, mehrere
Benutzer in einem Wallet mit mehreren Servicenamen zu verbinden. Wichtig ist, dass jeder Servicename
pro Wallet nur einmal vergeben wird. Man könnte sich also die Einträge im Wallet als Zeilen einer
Tabelle vorstellen, die aus drei Spalten (Servicenamen, Benutzernamen, Passwörter) besteht und
deren Primärschlüssel der Servicename ist. Jede Zeile bzw. jeder Servicename wird einzeln mit
mkstore im Wallet angelegt.
2. Servicenamen in tnsnames.ora eintragen
Die im Wallet angegebenen Servicenamen müssen nun über Einträge in der Datei tnsnames.ora
spezifiziert werden. Dazu könnte man der Einfachheit halber z.B. einen vorhandenen Eintrag duplizieren
und modifizieren. Der Eintrag für den Servicenamen scotty, der im Beispielwallet oben angelegt
wurde, könnte etwa so aussehen
3. Verwendung des Wallet über sqlnet.ora einrichten
Nachdem das Wallet angelegt und mit Einträgen versehen ist sowie die Servicenamen in der Datei
tnsnames.ora spezifiziert sind, muss noch bekannt gemacht werden, in welchem Verzeichnis
das Wallet gespeichert ist. Ausserdem muss festgelegt werden, dass das Wallet auch tatsächlich zum
Verbindungsaufbau benutzt werden soll. Das geschieht durch zwei Einträge in der Datei sqlnet.ora.
Benutzt werden dazu die Parameter wallet_location und sqlnet.wallet_override.
Für das Beispiel sieht der Eintrag demnach so aus
Damit sind alle Komponenten für die Verwendung von external password files eingerichtet. Hier noch
einmal alles zur Zusammenfassung als Schaubild
Zum Vergrößern auf das Bild klicken, zurück zum Artikel mit dem Back-Button des Browser
4. Anpassen von Skripten / Einloggen ohne Passwort
Nun müssen nur noch die Skripte der Batch Jobs modifiziert werden. Dazu wird jeweils das
connect BENUTZERNAME/PASSWORT ersetzt durch connect /@servicename, um im Beispiel
zu bleiben also durch connect /@scotty. Der Aufruf von SQL*Plus auf der Kommandozeile erfolgt
entsprechend, wie man an der folgenden Darstellung erkennen kann
Zum Vergrößern auf das Bild klicken, zurück zum Artikel mit dem Back-Button des Browser
Zum Abschluss sei darauf hingewiesen, dass es sich natürlich empfiehlt, die beteiligten Dateien vor
dem Zugriff durch Unbefugte zu sichern - unter UNIX z.B. durch eine restriktive Vergabe der Lese- und Schreibberechtigungen.
Zurück zur Community-Seite
|