Во многих случаях необходимо или целесообразно быстро и, главное, безопасно подключиться к базе данных так, чтобы детали подключения к базе данных не были видны. Примером, как указано на странице 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]$