Secure External Password Store

Het is vaak nodig om connecties te maken naar de database, vanaf shellscripts die op een filesysteem staan. Dit kan natuurlijk een behoorlijk security lek worden als deze scipts de database connectie gegevens bevat.

Een oplossing is om Os Authentication te gebruiken echter Oracle 10g Release 2 geeft ons de optie om een veilige externe wachtwoordopslag te gebruiken waar de Oracle login credentials opgeslagen worden in een "Wallet" op de client. Dit maakt het mogelijk om scripts connecties te laten mee te geven met gebruik van de "/@db_alias" syntax.

Ten eerste beslis je wat de plek wordt van de Oracle wallet. In dit voor beeld de "/oracle/admin/network/etc" directory. Voeg de volgende entries in de sqlnet.ora van de client met je "preferred wallet location"

WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /oracle/admin/network/etc)
)
)
SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 0

De SQLNET.WALLET_OVERRIDE entry stelt deze methode in staat om de bestaande OS authenticatie configuratie te overrulen.

Vervolgens moeten we een Oracle wallet creeren in de zojuist gespecificeerde lokatie me de mkstore utility met de e -create option. De wallet is password beschermt, maar wordt gedefinieerd met de "Auto Login" property enabled, zodat de connectiepogingen door de user die de wallet heeft gemaakt geen wachtwoord nodig heeft.

$>mkstore -wrl "/oracle/admin/network/etc" -create

Enter password:

Enter password again:

$>

Vervolgens voegen we de wachtwoord gegevens aan de wallet toe met de -createCredential optie.

$>mkstore -wrl "/oracle/admin/network/etc" -createCredential db10g scott tiger

Enter password:

Create credential oracle.security.client.connect_string1

$>

De db_alias, in dit geval "test10g_db", is de identifier die gebruikt wordt in de "/@db_alias" syntax, en moet een overeenkomende entry in de "tnsnames.ora" file hebben.

We kunnen de credentials die in de wallet aanwezig zijn laten zien met de -listCredential optie.

$>mkstore -wrl "/oracle/admin/network/etc" -listCredential

Enter password:

List credential (index: connect_string username)

1: test10g_db scott

$>

 

Met de aangemaakt wallet en de wachtwoord credentials op zijn plek, kunnen we connectie maken met de database zonder een username/password te specificeren:

$\>sqlplus /@test10g_db

SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 19 08:15:09 2007

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

Connected to:

Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production

With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options

SQL> show user

USER is "SCOTT"

SQL>

 

Dit is goed als je maar per database er als 1 user ingaat, maar wat als je er als meerdere users in wil? Eenvoudigweg een nieuwe entry aan de wallet toevoegen gebruik makend van een andere db_alias en zorg ervoor dat deze alias in de "tnsnames.ora" file staat. We hebben nu dus een gebruiker "test" op de "db10g" database, we creeren een nieuwe entry in de wallet:

$>mkstore -wrl "/oracle/admin/network/etc" -createCredential TEST10g_test test test

Enter password:

Create credential oracle.security.client.connect_string1

$>

 

Dan maken we een nieuwe entry voor de "test10g_db_test" database in de client "tnsnames.ora" file.

TEST10g_TEST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = TEST10g_TEST.WORLD)
)
)

Nu kunnen we connecten als de "test" user als onder.

$>sqlplus /@TEST10g_TEST 
SQL*Plus: Release 10.2.0.1.0 - Production on Thu Jul 19 10:17:47 2007 Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production With the Partitioning,
Oracle Label Security, OLAP and Data Mining Scoring Engine options
SQL> show user

USER is "TEST"

SQL>

 

Om de secure external password store te kunnen gebruiken vanaf een Java applicatie moet je de OCI driver gebruiken, wat eigenlijk inhoud dat je
client geïnstalleerd moet hebben. Om de connectie te gebruiken moet je een gewonen URL gebruiken:

Connection conn = DriverManager.getConnection ("jdbc:oracle:oci:/@TEST10g_TEST");

Password credentials van bestaande wallet entries kunnen aangepast of verwijderd worden met het volgende commando:

$>mkstore -wrl <wallet_location> -modifyCredential <dbase_alias> <username> <password>

$>mkstore -wrl <wallet_location> -deleteCredential <db_alias>

 

 

Advertentie

>

Poll

Voorkeur
 

Wie is er aanwezig

We hebben 303 gasten online