Безопасное внешнее хранилище паролей

Во многих случаях необходимо или целесообразно быстро и, главное, безопасно подключиться к базе данных так, чтобы детали подключения к базе данных не были видны. Примером, как указано на странице Oracle, может служить подключение к базе данных из сценариев оболочки, находящихся в файловой системе. Если эти сценарии содержат детали подключения, то это может стать серьезной проблемой безопасности. Для этого и подобных примеров можно использовать собственную аутентификацию операционной системы, но начиная с Oracle 10g Release2 появилась возможность использовать безопасное внешнее хранилище паролей, хранящее учетные данные для входа в Oracle в кошельке, хранящемся на стороне клиента. Для понимания этого, создается файл с учетными данными для подключения к базе данных, хранящийся на стороне клиента, который в строке подключения будет указывать, где находится этот "файл" для подключения. Это позволит пользователю подключаться по синтаксису "/@alias", где alias - это имя, выбранное для подключения к базе данных.

Настройка безопасного внешнего хранилища паролей

Сначала мы должны выбрать место сохранения кошелька Oracle, т.е. место, где будет храниться файл кошелька с данными подключения, которые Oracle будет считывать для подключения к базе данных со следующим синтаксисом "/@alias".

    Примечание: Местом расположения может быть общий каталог, к которому имеют доступ несколько пользователей для подключения к базе данных.

    В нашем случае, поскольку это тест, мы оставим Oracle Wallet в oracle home нашей клиентской машины.

      mkdir -p /home/oracle/wallet

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

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

      Добавьте следующую запись в файл sqlnet.ora, расположенный внутри пути TNS_ADMIN, в нашем случае "/u01/app/oracle/21.0.0/oracle/network/admin/sqlnet.ora".

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

      Важно добавить запись SQLNET.WALLET_OVERRIDE, которая позволяет переопределить все существующие настройки аутентификации операционной системы.

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

      На этом этапе мы можем создать кошелек с помощью инструмента oracle mkstore с опцией -create. Кошелек защищен паролем, но он определен с включенным свойством "autologin", так что пользователи, подключающиеся к базе данных, будут делать это, не требуя пароля, что, в принципе, и является целью, которую мы преследуем, создавая "безопасный внешний пароль".

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

      После создания кошелька его можно модифицировать с помощью команды "mkstore", описанной ниже.

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

      В нашем случае мы собираемся установить соединение, следуя этой записи tnsnames.ora с пользователем test.

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

      Предложение выглядит следующим образом. Местонахождение кошелька, запись о соединении с базой данных, пользователь и пароль пользователя, с которым должно быть осуществлено соединение.

      mkstore -wrl "/home/oracle/wallet" -createCredential TEST_EXTUSER test test testpassword

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

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

      После того как кошелек сгенерирован, мы можем подключиться к базе данных с помощью сгенерированного ранее кошелька. Для подключения мы будем использовать следующий синтаксис "/@db_alias". где db_alias - это ссылка на запись кошелька, которую мы добавили и настроили в файле tnsnames, в нашем случае: /@@TEST_EXTUSER

      [oracle@localhost admin]$ sqlplus /@TEST_EXTUSER
      SQL*Plus: Release 21.0.0.0.0.0 - Production on Sun Oct 2 17:48:52 2022
      Version 21.3.0.0.0.0
      Copyright (c) 1982, 2021, Oracle. Все права защищены.
      Время последнего успешного входа: Sun Oct 02 2022 17:47:12 -04:00
      Подключено к:
      Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0 - Production
      Version 21.3.0.0.0.0
      SQL>

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

      Список текущих записей в нашем кошельке

      Перечислим созданные нами записи в кошельке. Для этого добавим синтаксис - listCredential, указывающий на путь к кошельку, в котором мы хотим видеть учетные данные, Oracle запросит у нас пароль кошелька.

      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

      Если мы хотим добавить новое соединение в наш Wallet для внешнего подключения к базе данных с использованием "внешнего пароля", просто добавьте нового пользователя или новую строку соединения, соответствующую новой записи в файле tnsnames.ora. Именно она будет использоваться для создания соединения.

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

      Если теперь перечислить записи кошелька, то можно увидеть новую запись, которую мы добавили, - это RAUL_EXTUSER нашей записи в 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.0 - Production on Sun Oct 2 18:34:07 2022
      Version 21.3.0.0.0.0
      Copyright (c) 1982, 2021, Oracle. Все права защищены.
      Время последнего успешного входа: Sun Oct 02 2022 18:26:16 -04:00
      Подключено к:
      Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0.0 - Production
      Version 21.3.0.0.0.0.0.

      Изменение учетных данных кошелька

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

      Удаление учетных данных из кошелька

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

      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]$  
      Прокрутка к верху