Secure External Password Store

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.

Настройка 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”.

    Nota: La localización puede ser un directorio común donde tienen acceso varios usuarios para conectarse a la base de datos.

    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

      Загружаем переменные окружения TNS_ADMIN, если вы не сделали этого ранее, указав на файл tnsnames.ora, где мы укажем строку подключения к базе данных нашей клиентской машины.

      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”

      В этом файле мы должны указать каталог, где находится файл Wallet, который мы создали ранее.

      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]$

      После создания wallet его можно изменить с помощью команды “mkstore”, которая описана ниже.

      Добавьте учетные данные пользователя/пароля в недавно созданный wallet, используя опцию -createCredential. Проще говоря, на этом этапе нужно указать учетные данные, необходимые для подключения к базе данных, которые будут храниться в файле паролей.

      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

      Вывод команды следующий, он запросит пароль wallet для создания учетных данных:

      [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>

      После создания Wallet мы можем выполнять различные действия с созданным кошельком:

      Список текущих записей в нашем 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]$

      Добавление нового пользовательского соединения в 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

      Мы можем протестировать соединение.

      [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

      Изменение учетных данных Wallet

      Учетные данные кошелька могут быть изменены, мы можем изменить пароль текущего кошелька просто с помощью синтаксиса “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:   

      Удаление учетных данных из Wallet

      Учетные данные кошелька могут быть удалены с помощью следующей команды.

      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]$  
      Прокрутка к началу