11/06/2026
ExternalPassword

En muchas ocasiones es necesario o aconsejable conectarte a la base de datos de manera rápida y sobre todo segura, sin que los detalles de conexión de la base de datos sean visibles. Un ejemplo, tal y como indica en su página Oracle, es cuando nos conectamos a la base de datos desde los scripts de Shell contenidos en el sistema de archivos. Si estos scripts contienen los detalles de conexión pueden ser un problema de seguridad bastante importante. Para este ejemplo u otros similares, podemos usar la autentificación propia del sistema operativo, pero a partir de Oracle 10g Release2, nos da la opción de usar un almacén de contraseñas externo seguro, guardando las credenciales de inicio de la sesión de Oracle en un wallet guardado en el lado del cliente. Para entenderlo, lo que se crea es un fichero con las credenciales para conectarnos a la base de datos guardados en el lado del cliente, que en la cadena de conexión indicará donde se encuentra este “fichero” para conectarnos. Esto permitirá al usuario conectarse siguiendo la sintaxis siguiente “/@alias”, siendo alias el nombre elegido para la conexión a la base de datos.

Configure Secure External Password Store

En primer lugar debemos elegir donde queremos guardar el Oracle wallet, es decir es el lugar donde se almacenará el fichero de wallet con los datos de conexión que Oracle leerá para conectarnos a la base de datos con la sintáxis siguiente “/@alias”.

Note: The location can be a common directory where several users have access to connect to the database.

En nuestro caso, al tratarse de una prueba vamos a dejar el Oracle Wallet en el home de oracle de nuestra máquina cliente.

mkdir -p /home/oracle/wallet

We load the TNS_ADMIN environment variables, if you have not done it before, pointing to the file tnsnames.ora where we will specify the connection string to the database of our client machine.

export TNS_ADMIN=/u01/app/oracle/21.0.0/oracle/network/admin

Añadimos la entrada siguiente en el fichero sqlnet.ora, ubicado dentro de la ruta TNS_ADMIN, en nuestro caso “/u01/app/oracle/21.0.0/oracle/network/admin/sqlnet.ora”

In this file we must specify the directory where the Wallet file we created earlier is located.

Es importante añadir la entrada SQLNET.WALLET_OVERRIDE que permite anular cualquier configuración de autentificación del sistema operativo existente.

WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
 (METHOD_DATA =
   (DIRECTORY = /home/oracle/wallet)
)
)
SQLNET.WALLET_OVERRIDE = TRUE
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 0

En este punto ya podemos crear el wallet con la herramienta oracle mkstore con la opción -create. El wallet está protegido con contraseña, pero es definido con propiedad “Inicio de sesión automático” o «autologin» habilitada , de esta forma los usuarios que se conecten a la base de datos lo harán sin que se requiera una contraseña, que es en principio la meta que buscamos con la creación de “secure external password”.

[oracle@localhost bin]$ mkstore -wrl «/home/oracle/wallet» -create
Oracle Secret Store Tool Release 21.0.0.0.0 – Production
21.3.0.0.0: Versión {1}
Copyright (c) 2004, 2021, Oracle y/o sus subsidiarias. Todos los Derechos Reservados.
Introducir Contraseña:  
Volver a Introducir Contraseña:  
[oracle@localhost bin]$

La password introducida con anterioridad es la del fichero wallet, es conveniente recordarla y/o guardarla a buen recaudo porque  Oracle la pedirá para poder manipular la información que almacena. Oracle mkstore crea dos ficheros (cwallet.sso, ewallet.p12).

The wallet is created with read/write permissions only for the current user, so no other user can read it.

/home/oracle/wallet
[oracle@localhost wallet]$ ls -rlt
total 8
-rw——-. 1 oracle oracle   0 sep 27 19:16 ewallet.p12.lck
-rw——-. 1 oracle oracle 149 sep 27 19:16 ewallet.p12
-rw——-. 1 oracle oracle   0 sep 27 19:16 cwallet.sso.lck
-rw——-. 1 oracle oracle 194 sep 27 19:16 cwallet.sso

Once the wallet is created, it can be modified using the "mkstore" command described below.

Add the user/password credentials to the wallet recently using the -createCredential option. To put it simply, at this point it is a matter of indicating the credentials we need to connect to the database that will be stored in the password file.

En nuestro caso vamos a realizar una conexión, siguiendo esta entrada del tnsnames.ora con el usuario test.

TEST_EXTUSER =
(DESCRIPTION =
(ADDRESS =
(PROTOCOL = TCP)
(HOST = localhost)
(PORT = 1521)
)
(CONNECT_DATA = (server=dedicated) (service_name = srv_testing))
)

La sentencia es la siguiente.  Ubicación del wallet, entrada de la conexión a BBDD, usuario y password del usuario con el que se quiere realizar la conexión.

mkstore -wrl «/home/oracle/wallet» -createCredential TEST_EXTUSER test testpassword

The output of the command is as follows, it will ask you for the wallet password to create the credentials:

[oracle@localhost bin]$ mkstore -wrl «/home/oracle/wallet» -createCredential TEST_EXTUSER test testpassword
Oracle Secret Store Tool Release 21.0.0.0.0 – Production
21.3.0.0.0: Versión {1}
Copyright (c) 2004, 2021, Oracle y/o sus subsidiarias. Todos los Derechos Reservados.
Introducir Contraseña de Cartera:  

Una vez generado el wallet ya nos podemos conectar a la base de datos con la cartera generada anteriormente. Para conectarnos utilizaremos la siguiente sintáxis “/@db_alias» , donde db_alias es la referencia a la entrada de la cartera que hemos añadido y que tenemos configurada en nuestro fichero tnsnames, en  nuestro caso: /@TEST_EXTUSER

[oracle@localhost admin]$ sqlplus /@TEST_EXTUSER
SQL*Plus: Release 21.0.0.0.0 – Production on Sun Oct 2 17:48:52 2022
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle.  All rights reserved.
Last Successful login time: Sun Oct 02 2022 17:47:12 -04:00
Connected to:
Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0 – Production
Version 21.3.0.0.0
SQL>

Once the Wallet is generated, we can perform several actions on the generated wallet:

List current entries in our Wallet

Listar las entradas que hemos creado en el wallet. Para ello añadiremos la sintásis – listCredential apuntando a la ruta del wallet sobre el que queremos ver las credenciales, Oracle nos pedirá la password del Wallet.

oracle@localhost admin]$  mkstore -wrl «/home/oracle/wallet» -listCredential
Oracle Secret Store Tool Release 21.0.0.0.0 – Production
21.3.0.0.0: Versión {1}
Copyright (c) 2004, 2021, Oracle y/o sus subsidiarias. Todos los Derechos Reservados.
Introducir Contraseña de Cartera:  
List credential (index: connect_string username)
1: TEST_EXTUSER test
[oracle@localhost admin]$

Adding a new user connection to a previously created Wallet

Si queremos añadir una nueva conexión a nuestro Wallet para conectaros a la base de datos de forma externa usando “external Password”, simplemente añade el nuevo usuario o una nueva cadena de conexión que coincida con una nueva entrada en tu tnsnames.ora. Esta será la que utilices para realizar la conexión.

[oracle@localhost admin]$ mkstore -wrl «/home/oracle/wallet» -createCredential RAUL_EXTUSER raul testpassword
Oracle Secret Store Tool Release 21.0.0.0.0 – Production
21.3.0.0.0: Versión {1}
Copyright (c) 2004, 2021, Oracle y/o sus subsidiarias. Todos los Derechos Reservados.
Introducir Contraseña de Cartera:  

Si listamos ahora las entradas del wallet podremos ver la nueva entrada que hemos añadido, siendo RAUL_EXTUSER nuestra entrada del tnsnames.ora

[oracle@localhost admin]$  mkstore -wrl «/home/oracle/wallet» -listCredential
Oracle Secret Store Tool Release 21.0.0.0.0 – Production
21.3.0.0.0: Versión {1}
Copyright (c) 2004, 2021, Oracle y/o sus subsidiarias. Todos los Derechos Reservados.
Introducir Contraseña de Cartera:  
List credential (index: connect_string username)
2: RAUL_EXTUSER raul
1: TEST_EXTUSER test

We can test the connection.

[oracle@localhost admin]$ sqlplus /@RAUL_EXTUSER
SQL*Plus: Release 21.0.0.0.0 – Production on Sun Oct 2 18:34:07 2022
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle.  All rights reserved.
Last Successful login time: Sun Oct 02 2022 18:26:16 -04:00
Connected to:
Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0 – Production
Version 21.3.0.0.0

Modifying the credentials of a Wallet

The credentials of the wallet can be modified, we can change the password of the current wallet simply with the sitaxis "modifyCredential".

[oracle@localhost admin]$  mkstore -wrl "/home/oracle/wallet" -modifyCredential RAUL_EXTUSER raul raulnewpassword
Oracle Secret Store Tool Release 21.0.0.0.0 - Production
21.3.0.0.0: Versión {1}
Copyright (c) 2004, 2021, Oracle y/o sus subsidiarias. Todos los Derechos Reservados.
Introducir Contraseña de Cartera:   

Remove credentials from a Wallet

The credentials of a wallet can be deleted with the following command.

mkstore -wrl <wallet_location> -deleteCredential <db_alias>
[oracle@localhost admin]$ mkstore -wrl "/home/oracle/wallet" -deleteCredential RAUL_EXTUSER
Oracle Secret Store Tool Release 21.0.0.0.0 - Production
21.3.0.0.0: Versión {1}
Copyright (c) 2004, 2021, Oracle y/o sus subsidiarias. Todos los Derechos Reservados.
Introducir Contraseña de Cartera:  
[oracle@localhost admin]$  
YouTube
LinkedIn