{"id":16,"date":"2023-07-19T11:01:08","date_gmt":"2023-07-19T11:01:08","guid":{"rendered":"https:\/\/oracleconraul.wordpress.com\/?p=11"},"modified":"2026-06-01T21:39:04","modified_gmt":"2026-06-01T21:39:04","slug":"external-password","status":"publish","type":"post","link":"https:\/\/oracleconraul.com\/index.php\/2023\/07\/19\/external-password\/","title":{"rendered":"Secure External Password Store"},"content":{"rendered":"\n<p>En muchas ocasiones es necesario o aconsejable conectarte a la base de datos de manera r\u00e1pida y sobre todo segura, sin que los detalles de conexi\u00f3n de la base de datos sean visibles. Un ejemplo, tal y como indica en su p\u00e1gina 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\u00f3n pueden ser un problema de seguridad bastante importante. Para este ejemplo u otros similares, podemos usar la autentificaci\u00f3n propia del sistema operativo, pero a partir de Oracle 10g Release2, nos da la opci\u00f3n de usar un almac\u00e9n de contrase\u00f1as externo seguro, guardando las credenciales de inicio de la sesi\u00f3n 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\u00f3n indicar\u00e1 donde se encuentra este \u201cfichero\u201d para conectarnos. Esto permitir\u00e1 al usuario conectarse siguiendo la sintaxis siguiente \u201c\/@alias\u201d, siendo alias el nombre elegido para la conexi\u00f3n a la base de datos.<\/p>\n\n\n\n<p><strong>Configurar Secure External Password Store<\/strong><\/p>\n\n\n\n<p>En primer lugar debemos elegir donde queremos guardar el Oracle wallet, es decir es el lugar donde se almacenar\u00e1 el fichero de wallet con los datos de conexi\u00f3n que Oracle leer\u00e1 para conectarnos a la base de datos con la sint\u00e1xis siguiente \u201c\/@alias\u201d.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<p>Nota: La localizaci\u00f3n puede ser un directorio com\u00fan donde tienen acceso varios usuarios para conectarse a la base de datos.<br><br>En nuestro caso, al tratarse de una prueba vamos a dejar el Oracle Wallet en el home de oracle de nuestra m\u00e1quina cliente. <\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><\/li>\n<\/ul>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">mkdir -p \/home\/oracle\/wallet<\/p>\n\n\n\n<p>Cargamos las variables de entorno del TNS_ADMIN, si no lo has hecho anteriormente, apuntando al fichero tnsnames.ora donde especificaremos la cadena de conexi\u00f3n a la base de datos de nuestra m\u00e1quina cliente.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">export TNS_ADMIN=\/u01\/app\/oracle\/21.0.0\/oracle\/network\/admin<\/p>\n\n\n\n<p>A\u00f1adimos la entrada siguiente en el fichero sqlnet.ora, ubicado dentro de la ruta TNS_ADMIN, en nuestro caso \u201c\/u01\/app\/oracle\/21.0.0\/oracle\/network\/admin\/sqlnet.ora\u201d<\/p>\n\n\n\n<p>En este fichero debemos especificar el directorio donde se encuentra el fichero de Wallet que creamos anteriormente.<\/p>\n\n\n\n<p>Es importante a\u00f1adir la entrada SQLNET.WALLET_OVERRIDE que permite anular cualquier configuraci\u00f3n de autentificaci\u00f3n del sistema operativo existente.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">WALLET_LOCATION =<br>(SOURCE =<br>(METHOD = FILE)<br>&nbsp;(METHOD_DATA =<br>&nbsp;&nbsp; (DIRECTORY = \/home\/oracle\/wallet)<br>)<br>)<br>SQLNET.WALLET_OVERRIDE = TRUE<br>SSL_CLIENT_AUTHENTICATION = FALSE<br>SSL_VERSION = 0<\/p>\n\n\n\n<p>En este punto ya podemos crear el wallet con la herramienta oracle mkstore con la opci\u00f3n -create. El wallet est\u00e1 protegido con contrase\u00f1a, pero es definido con propiedad \u201cInicio de sesi\u00f3n autom\u00e1tico\u201d o \u00abautologin\u00bb habilitada , de esta forma los usuarios que se conecten a la base de datos lo har\u00e1n sin que se requiera una contrase\u00f1a, que es en principio la meta que buscamos con la creaci\u00f3n de \u201csecure external password\u201d.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">[oracle@localhost bin]$ mkstore -wrl \u00ab\/home\/oracle\/wallet\u00bb -create<br>Oracle Secret Store Tool Release 21.0.0.0.0 \u2013 Production<br>21.3.0.0.0: Versi\u00f3n {1}<br>Copyright (c) 2004, 2021, Oracle y\/o sus subsidiarias. Todos los Derechos Reservados.<br>Introducir Contrase\u00f1a:&nbsp;&nbsp;<br>Volver a Introducir Contrase\u00f1a:&nbsp;&nbsp;<br>[oracle@localhost bin]$<\/p>\n\n\n\n<p>Una vez que se crea el wallet, se puede modificar utilizando el comando \u201cmkstore\u201d que se describe a continuaci\u00f3n.<\/p>\n\n\n\n<p>Agregue las credenciales de usuario\/contrase\u00f1a al wallet recientemente usando la opci\u00f3n -createCredential. Por decirlo de una manera sencilla, en este punto se trata de indicar las credenciales que necesitamos para conectarnos a la base de datos que ser\u00e1n almacenados en fichero de password.<\/p>\n\n\n\n<p>En nuestro caso vamos a realizar una conexi\u00f3n, siguiendo esta entrada del tnsnames.ora con el usuario test.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">TEST_EXTUSER =<br>&nbsp;&nbsp;&nbsp;&nbsp; (DESCRIPTION =<br>&nbsp;&nbsp;&nbsp;&nbsp; (ADDRESS =<br>&nbsp;&nbsp;&nbsp; (PROTOCOL = TCP)<br>&nbsp; (HOST = localhost)<br>&nbsp; (PORT = 1521)<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br>(CONNECT_DATA = (server=dedicated) (service_name = srv_testing))<br>&nbsp;&nbsp; )<\/p>\n\n\n\n<p>La sentencia es la siguiente. &nbsp;Ubicaci\u00f3n del wallet, entrada de la conexi\u00f3n a BBDD, usuario y password del usuario con el que se quiere realizar la conexi\u00f3n.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">mkstore -wrl \u00ab\/home\/oracle\/wallet\u00bb -createCredential TEST_EXTUSER test testpassword<\/p>\n\n\n\n<p>La salida del comando es lasiguiente, te pedir\u00e1 la contrase\u00f1a del wallet para crear las credenciales:<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">[oracle@localhost bin]$ mkstore -wrl \u00ab\/home\/oracle\/wallet\u00bb -createCredential TEST_EXTUSER test testpassword<br>Oracle Secret Store Tool Release 21.0.0.0.0 \u2013 Production<br>21.3.0.0.0: Versi\u00f3n {1}<br>Copyright (c) 2004, 2021, Oracle y\/o sus subsidiarias. Todos los Derechos Reservados.<br>Introducir Contrase\u00f1a de Cartera:&nbsp;&nbsp;<\/p>\n\n\n\n<p>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\u00e1xis \u201c\/@db_alias\u00bb&nbsp;, donde db_alias es la referencia a la entrada de la cartera que hemos a\u00f1adido y que tenemos configurada en nuestro fichero tnsnames, en&nbsp; nuestro caso: \/@TEST_EXTUSER<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">[oracle@localhost admin]$ sqlplus \/@TEST_EXTUSER<br>SQL*Plus: Release 21.0.0.0.0 \u2013 Production on Sun Oct 2 17:48:52 2022<br>Version 21.3.0.0.0<br>Copyright (c) 1982, 2021, Oracle.&nbsp; All rights reserved.<br>Last Successful login time: Sun Oct 02 2022 17:47:12 -04:00<br>Connected to:<br>Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0 \u2013 Production<br>Version 21.3.0.0.0<br>SQL&gt;<\/p>\n\n\n\n<p>Una vez generado el Wallet, podemos realizar varias acciones sobre la cartera generada:<\/p>\n\n\n\n<p><strong>Listar las entradas actuales que tiene nuestro Wallet<\/strong><\/p>\n\n\n\n<p>Listar las entradas que hemos creado en el wallet. Para ello a\u00f1adiremos la sint\u00e1sis \u2013 listCredential apuntando a la ruta del wallet sobre el que queremos ver las credenciales, Oracle nos pedir\u00e1 la password del Wallet.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">oracle@localhost admin]$&nbsp; mkstore -wrl \u00ab\/home\/oracle\/wallet\u00bb -listCredential<br>Oracle Secret Store Tool Release 21.0.0.0.0 \u2013 Production<br>21.3.0.0.0: Versi\u00f3n {1}<br>Copyright (c) 2004, 2021, Oracle y\/o sus subsidiarias. Todos los Derechos Reservados.<br>Introducir Contrase\u00f1a de Cartera:&nbsp;&nbsp;<br>List credential (index: connect_string username)<br>1:<strong>&nbsp;TEST_EXTUSER test<\/strong><br>[oracle@localhost admin]$<\/p>\n\n\n\n<p><strong>A\u00f1adir una nueva conexi\u00f3n de usuario a un Wallet creado con anterioridad<\/strong><\/p>\n\n\n\n<p>Si queremos a\u00f1adir una nueva conexi\u00f3n a nuestro Wallet para conectaros a la base de datos de forma externa usando \u201cexternal Password\u201d, simplemente a\u00f1ade el nuevo usuario o una nueva cadena de conexi\u00f3n que coincida con una nueva entrada en tu tnsnames.ora. Esta ser\u00e1 la que utilices para realizar la conexi\u00f3n.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">[oracle@localhost admin]$ mkstore -wrl \u00ab\/home\/oracle\/wallet\u00bb -createCredential RAUL_EXTUSER raul testpassword<br>Oracle Secret Store Tool Release 21.0.0.0.0 \u2013 Production<br>21.3.0.0.0: Versi\u00f3n {1}<br>Copyright (c) 2004, 2021, Oracle y\/o sus subsidiarias. Todos los Derechos Reservados.<br>Introducir Contrase\u00f1a de Cartera:&nbsp;&nbsp;<\/p>\n\n\n\n<p>Si listamos ahora las entradas del wallet podremos ver la nueva entrada que hemos a\u00f1adido, siendo RAUL_EXTUSER nuestra entrada del tnsnames.ora<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">[oracle@localhost admin]$&nbsp; mkstore -wrl \u00ab\/home\/oracle\/wallet\u00bb -listCredential<br>Oracle Secret Store Tool Release 21.0.0.0.0 \u2013 Production<br>21.3.0.0.0: Versi\u00f3n {1}<br>Copyright (c) 2004, 2021, Oracle y\/o sus subsidiarias. Todos los Derechos Reservados.<br>Introducir Contrase\u00f1a de Cartera:&nbsp;&nbsp;<br>List credential (index: connect_string username)<br>2:&nbsp;<strong>RAUL_EXTUSER&nbsp;<\/strong>raul<br>1: TEST_EXTUSER test<\/p>\n\n\n\n<p>Podemos probar la conexi\u00f3n.<\/p>\n\n\n\n<p class=\"has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">[oracle@localhost admin]$ sqlplus \/@RAUL_EXTUSER<br>SQL*Plus: Release 21.0.0.0.0 \u2013 Production on Sun Oct 2 18:34:07 2022<br>Version 21.3.0.0.0<br>Copyright (c) 1982, 2021, Oracle.&nbsp; All rights reserved.<br>Last Successful login time: Sun Oct 02 2022 18:26:16 -04:00<br>Connected to:<br>Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0 \u2013 Production<br>Version 21.3.0.0.0<\/p>\n\n\n\n<p><strong>Modificar las credenciales de un Wallet<\/strong><\/p>\n\n\n\n<p>Las credenciales de los wallet pueden ser modificadas, podemos cambiar la password del wallet actual simplemente con la sitaxis \u201cmodifyCredential\u201d<\/p>\n\n\n\n<pre class=\"wp-block-preformatted has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">[oracle@localhost admin]$&nbsp; mkstore -wrl \"\/home\/oracle\/wallet\" -modifyCredential RAUL_EXTUSER raul raulnewpassword\nOracle Secret Store Tool Release 21.0.0.0.0 - Production\n21.3.0.0.0: Versi\u00f3n {1}\nCopyright (c) 2004, 2021, Oracle y\/o sus subsidiarias. Todos los Derechos Reservados.\nIntroducir Contrase\u00f1a de Cartera:   <\/pre>\n\n\n\n<p><strong>Eliminar las credenciales de un Wallet<\/strong><\/p>\n\n\n\n<p>Las credenciales de un wallet pueden ser borradas con el siguiente comando.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted has-ast-global-color-8-color has-ast-global-color-4-background-color has-text-color has-background has-small-font-size\">mkstore -wrl &lt;wallet_location&gt; -deleteCredential &lt;db_alias&gt;\n[oracle@localhost admin]$ mkstore -wrl \"\/home\/oracle\/wallet\" -deleteCredential RAUL_EXTUSER\nOracle Secret Store Tool Release 21.0.0.0.0 - Production\n21.3.0.0.0: Versi\u00f3n {1}\nCopyright (c) 2004, 2021, Oracle y\/o sus subsidiarias. Todos los Derechos Reservados.\nIntroducir Contrase\u00f1a de Cartera:  \n[oracle@localhost admin]$  <\/pre>\n","protected":false},"excerpt":{"rendered":"<p>En muchas ocasiones es necesario o aconsejable conectarte a la base de datos de manera r\u00e1pida y sobre todo segura, sin que los detalles de conexi\u00f3n de la base de datos sean visibles. Un ejemplo, tal y como indica en su p\u00e1gina Oracle, es cuando nos conectamos a la base de datos desde los scripts<\/p>\n<div class=\"more-link\">\n\t\t\t\t <a href=\"https:\/\/oracleconraul.com\/index.php\/2023\/07\/19\/external-password\/\" class=\"link-btn theme-btn\"><span>Leer M\u00e1s <\/span> <i class=\"fa fa-caret-right\"><\/i><\/a>\n\t\t\t<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"wpupg_custom_link":[],"wpupg_custom_link_behaviour":[],"wpupg_custom_link_nofollow":[],"wpupg_custom_image":[],"wpupg_custom_image_id":[],"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[14],"tags":[32],"class_list":["post-16","post","type-post","status-publish","format-standard","hentry","category-oracle","tag-seguridad-security"],"_links":{"self":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts\/16","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/comments?post=16"}],"version-history":[{"count":39,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts\/16\/revisions"}],"predecessor-version":[{"id":6331,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/posts\/16\/revisions\/6331"}],"wp:attachment":[{"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/media?parent=16"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/categories?post=16"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/oracleconraul.com\/index.php\/wp-json\/wp\/v2\/tags?post=16"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}