Oracle wallet что это
что с Москвы, да и подал ему господарский лист воложской.
Московского священника Ивана Лукьянова
хождение в Святую землю
Соединения участников сети могут быть двух типов: СУБД с другими участниками, когда она выступает в качестве клиента, и других участников (клиентских программ) с СУБД. Ниже приводятся примеры организации того и другого.
Создание бумажника с сертификатами ПО Oracle позволяет создать пустой бумажник, и потом включить в него необходимые сертификаты подлинности. Однако программы owm (Wallet Manager), orapki, mkstore и mkwallet позволяют создать бумажник с некоторым начальным набором сертификатов. Первая из этих программ сумеет создать желаемый каталог для хранения файла бумажника сама, а остальные предполагают каталог уже имеющимся.
Пример, для сервера:
set WALLETLOC=C:\oracle\product\10.2.0\db_1\NETWORK\wallet mkdir %WALLETLOC% mkstore -wrl %WALLETLOC% -create В диалоге потребуется указать придуманный пароль, например, по-прежнему amicus123. Заметьте, что в созданом каталоге образовались сразу два файла, что соответствует постоянно открытому бумажнику; этото нам и требуется.
Еще пример создания:
orapki wallet create -wallet %WALLETLOC% -pwd amicus123
Появился один файл ewallet.p12, но зато этой же программой можно ознакомиться с его содержимым:
orapki wallet display -wallet %WALLETLOC% -pwd amicus123 Наконец, создать бумажник и работать с его содержимым можно через Oracle Wallet Manager (меню Wallet
New). При этом от следующего предложения придется отказаться:
В противном случае программа предложит текст заявки на получение сертификата, что пока не нужно.
Свойство бумажника Auto Login в Wallet Manager нужно будет задать самостоятельно.
Следует обратить внимание, чтобы места нахождения файлов бумажников были доступны элементам ПО соответственно сервера и клиента.
Защищенные соединения с СУБД по протоколу SSL ПО Oracle Advanced Security позволяет проводить авторизацию соединений клиента с сервером средствами сторонних продуктов, таких как Kerberos или RADIUS.
Конфигурирование Oracle Net Процесс установки соединеий клиентов с СУБД listener должен быть настроен на прием заявок подключений по протоколу TCPS. Для этого в файле listener.ora следует пополнить описание списка портов в параметре LISTENER. По умолчанию Oracle Net использует для TCPS порт 2484; ниже эта традиция сохранена. Указание SSL_VERSION в файлах ниже приводится для определенности и не имеет принципиального значения.
Примерный фрагмент из listener.ora может выглядеть так:
После подобной правки файла listener.ora программу listener стоит перезапустить.
Правка файла sqlnet.ora может выглядеть примерно так:
SQLNET.AUTHENTICATION_SERVICES = ( TCPS, NTS )
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 3.0 WALLET_LOCATION = ( SOURCE = ( METHOD = FILE ) ( METHOD_DATA = ( DIRECTORY = C:\oracle\product\10.2.0\db_1\NETWORK\wallet ) ) ).
Правка файла tnsnames.ora может выглядеть примерно так:
(Предполагается, что имя службы БД – orcl).
Правка файла sqlnet.ora может выглядеть примерно так:
NAMES.DIRECTORY_PATH = ( TNSNAMES ) SSL_VERSION = 3.0 WALLET_LOCATION = ( SOURCE = ( METHOD = FILE ) ( METHOD_DATA = ( DIRECTORY = C:\oracle\product\10.2.0\client_1\NETWORK\wallet ) ) ).
Конфигурирование программой Net Manager
Выставить требуемые значения параметрам можно программой Net Manager, например:
Может случиться, что ПО Advanced Security доустанавливалось в последствии. Из-за внутренних ошибок программа Net Manager не всегда в таких случаях способна показать позицию Oracle Advanced Security ниспадающего меню.
Выйти из положения можно, подправив строку из файла netproperties в каталоге %ORACLE_HOME%\network\tools; например заменить:
INSTALLEDCOMPONENTS=CLIENT,ORACLENET
INSTALLEDCOMPONENTS=CLIENT,ORACLENET,ANO.
(ANO – сокращение старого названия нынешнего ПО Advanced Security Option).
Получение цифрового сертификата Для установления защищенного соединения по SSL потребуется получить цифровые сертификаты подлинности: (а) «пользователя» и (б) «корневой».
Сертификат пользователя будем получать на обращение к ресурсу, обозначенному следующим «различительным именем» (distinguished name, dn):
cn=orcl, cn=OracleContext, dc=us, dc=oracle, dc=com (Предполагается, что имя экземпляра СУБД – orcl). Правила построения различительных имен многократно описаны в литературе и в интернете.
Корневой сертификат понадобится для того, чтобы подтвердить сертификат пользователя. Подтвержденя ему не требуется, так как он подтверждает сам себя (отсюда название).
Подготовка заявки на сертификат пользователя Получение сертификата пользователя производится по подготовленной заявке (request). Подготовить заявку можно с помощью Wallet Manager, отдельно для бумажников на сервере и на клиенте. Обратиться к форме составления заявки можно через меню Operations Add Certificate Request. В форме Create Certificate Request следует выбрать Key Size = 1024 и нажать кнопку Advanced.
В появившуюся форму нужно внести различительное имя и нажать OK:
Если теперь «встать» на ветку Certificate (Requested) дерева объектов бумажника, справа увидим текст заявки на сертификат:
При желании можно с пощью меню запомнить текст заявки во внешнем файле.
Получить сертификат можно разными способами:
- от уполномоченных центров сертификации (certificate authority, CA), выдающих сертификаты за плату;
- с помощью бесплатных программ получения сертификатов, например openSSL;
- от собственного уполномоченного центра в рамках Identity Management Infrastructure в составе Oracle Application Server.
Последний вариант выглядит естественным при работе с ПО Oracle, однако, как и второй, требует определенного разбирательства, отвлекающего от основного изложения. Простым выходом может оказаться получение пробного бесплатного сертификата с трехнедельным сроком годности от фирмы thawte.
Нажав next, получим в ответ текст сертификата. Пока его нужно запомнить в каком-нибудь файле, например userCert.txt. Такой файл получаем отдельно для бумажника на сервере и на клиенте.
Импорт сертификатов в бумажник Нагляднее импортировать сертификаты опять-таки в Oracle Wallet Manager, хотя делать это можно и программами из командной строки.
Вначале импортируется корневой сертификат. Используется меню Operations Import Trusted Certificate.
Во вторую очередь импортируется сертификат пользователя посредством меню Operations Import User Certificate. Оба действия допускают указание как ссылки на файл, так и живого текста.
В результате ветка Certificate (Requested) объектов бумажника получит вид Certificate (Ready):
Сертификаты импортируются отдельно в бумажники сервера и клиента.
Установление защищенного соединения
На клиенте набираем:
sqlplus scott/tiger@orcl_ssl Убедиться, что действительно произошло соединение по SSL, можно по файлам протокола (журнала) соединений listener.log.
Если же включить трассировку сеанса (параметр TRACE_LEVEL_CLIENT в файле sqlnet.ora), увидим в файле трассировки примерно следующий фрагмент:
[10-DEC-2008 20:13:11:828] nzos_Trace_Negotiated_Cipher: The Final Negotiated SSL Cipher Suite is: SSL_RSA_WITH_3DES_EDE_CBC_SHA [10-DEC-2008 20:13:11:828] ntzdosecneg: SSL handshake done.
Подготовим текст программы для SQL*Plus:
SET SERVEROUTPUT ON
walletdir VARCHAR2 ( 100 ) := 'file:C:\oracle\product\10.2.0\db_1\NETWORK\wallet';
walletpass VARCHAR2 ( 100 ) := 'amicus123';
Прогон текста должен дать результат:
Защищенные соединения и сертификаты подлинности
Вторая активная область использования электронного бумажника Oracle - поддержка защищенных соединений между СУБД и узлами интернет. Защита соединений между участниками интернет строится на использовании шифрования передаваемых данных, обычно по схеме публичной инфраструктуры ключей (PKI), а это требует передачи от одного участника к другому шифроключа. Риск постороннего вмешательства в такую передачу значительно выше, чем при обращении СУБД к локальной файловой системе, так что кроме собственно шифроключа участники передают друг другу еще специальное подтверждение подлинности, то есть «цифровой сертификат» (Public key certificate), дающий принимающей стороне уверенность, что шифр не подложный. Бумажник Oracle способен такие сертификаты хранить.
Соединения участников сети могут быть двух типов: СУБД с другими участниками, когда она выступает в качестве клиента, и других участников (клиентских программ) с СУБД. Ниже приводятся примеры организации того и другого.
Создание бумажника с сертификатами
ПО Oracle позволяет создать пустой бумажник, и потом включить в него необходимые сертификаты подлинности. Однако программы owm (Wallet Manager), orapki, mkstore и mkwallet позволяют создать бумажник с некоторым начальным набором сертификатов. Первая из этих программ сумеет создать желаемый каталог для хранения файла бумажника сама, а остальные предполагают каталог уже имеющимся. Пример, для сервера:
В диалоге потребуется указать придуманный пароль, например, по-прежнему amicus123. Заметьте, что в созданом каталоге образовались сразу два файла, что соответствует постоянно открытому бумажнику; это-то нам и требуется.
Еще пример создания:
Появился один файл ewallet.p12, но зато этой же программой можно ознакомиться с его содержимым:
Наконец, создать бумажник и работать с его содержимым можно через Oracle Wallet Manager (меню Wallet ® New). При этом от следующего предложения придется отказаться:
В противном случае программа предложит текст заявки на получение сертификата, что пока не нужно. Свойство бумажника Auto Login в Wallet Manager нужно будет задать самостоятельно.
Следует обратить внимание, чтобы места нахождения файлов бумажников были доступны элементам ПО соответственно сервера и клиента.
Защищенные соединения с СУБД по протоколу SSL
Конфигурирование Oracle Net
Процесс установки соединеий клиентов с СУБД listener должен быть настроен на прием заявок подключений по протоколу TCPS. Для этого в файле listener.ora следует пополнить описание списка портов в параметре LISTENER. По умолчанию Oracle Net использует для TCPS порт 2484; ниже эта традиция сохранена. Указание SSLVERSION в файлах ниже приводится для определенности и не имеет принципиального значения.
Файлы сервера
Примерный фрагмент из listener.ora может выглядеть так:
После подобной правки файла listener.ora программу listener стоит перезапустить. Правка файла sqlnet.ora может выглядеть примерно так:
Файлы клиента
Правка файла tnsnames.ora может выглядеть примерно так:
(Предполагается, что имя службы БД - orcl).
Правка файла sqlnet.ora может выглядеть примерно так:
Конфигурирование программой Net Manager
Выставить требуемые значения параметрам можно программой Net Manager, например:
Может случиться, что ПО Advanced Security доустанавливалось впоследствии. Из-за внутренних ошибок программа Net Manager не всегда в таких случаях способна показать позицию Oracle Advanced Security ниспадающего меню. Выйти из положения можно, подправив строку из файла netproperties в каталоге %ORACLE_HOME%\network\tools; например заменить:
(ANO - сокращение старого названия нынешнего ПО Advanced Security Option).
Получение цифрового сертификата
Для установления защищенного соединения по SSL потребуется получить цифровые сертификаты подлинности: (а) «пользователя» и (б) «корневой». Сертификат пользователя будем получать на обращение к ресурсу, обозначенному следующим «различительным именем» (distinguished name, dn):
(Предполагается, что имя экземпляра СУБД - orcl). Правила построения различительных имен многократно описаны в литературе и в интернете.
Корневой сертификат понадобится для того, чтобы подтвердить сертификат пользователя. Подтвержденя ему не требуется, так как он подтверждает сам себя (отсюда название).
Подготовка заявки на сертификат пользователя
Получение сертификата пользователя производится по подготовленной заявке (request). Подготовить заявку можно с помощью Wallet Manager, отдельно для бумажников на сервере и на клиенте. Обратиться к форме составления заявки можно через меню Operations ® Add Certificate Request. В форме Create Certificate Request следует выбрать Key Size = 1024 и нажать кнопку Advanced. В появившуюся форму нужно внести различительное имя и нажать OK:
Если теперь «встать» на ветку Certificate (Requested) дерева объектов бумажника, справа увидим текст заявки на сертификат:
Получение сертификатов
Получить сертификат можно разными способами:
- от уполномоченных центров сертификации (certificate authority, CA), выдающих сертификаты за плату;
- с помощью бесплатных программ получения сертификатов, например openSSL;
- от собственного уполномоченного центра в рамках Identity Management Infrastructure в составе Oracle Application Server.
Последний вариант выглядит естественным при работе с ПО Oracle, однако, как и второй, требует определенного разбирательства, отвлекающего от основного изложения. Простым выходом может оказаться получение пробного бесплатного сертификата с трехнедельным сроком годности от фирмы thawte.
Импорт сертификатов в бумажник
Нагляднее импортировать сертификаты опять-таки в Oracle Wallet Manager, хотя делать это можно и программами из командной строки.
При желании можно с пощью меню запомнить текст заявки во внешнем файле.
Вначале импортируется корневой сертификат. Используется меню Operations —»Import Trusted Certificate.
Во вторую очередь импортируется сертификат пользователя посредством меню Operations — Import User Certificate. Оба действия допускают указание как ссылки на файл, так и живого текста.
В результате ветка Certificate (Requested) объектов бумажника получит вид Certificate (Ready):
1- Введение
Oracle 11g (OK for 12c)
2- Что такое Oracle Wallet?
Oracle Wallet это способ хранение информации соединения к базам данных, находящихся в разных доменах (domain). Таблица ниже иллюстрирует содержание в wallet.
DB Connection String | Username | Passwod |
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myserver1)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db11g) ) ) | dev | dev001 |
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = myserver2)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = db12c) ) ) | prod | prod123 |
Таким образом, Wallet содержит сертификаты (credentials), так что вы можете получить доступ к определенной базе данных. Когда меняется информация про базу данных, вы можете обновить wallet. Ваше приложение может использовать сертификаты на Wallet для доступа к базе данных вместо того, чтобы самим управлять информацией доступа.
Oracle Wallet хранит информации сертификата в файле. Это очень опасно, если хакер скопирует этот файл и использует на своих компьютерах. К счастью, Oracle позволяет создавать локальный Wallet, но он работает только на компьютере, который создавает его.
3- Wallet в Oracle 11g, 12c
3.1- Создание и управление Wallet (11g, 12c)
Вы должны открыть CMD с авторизацией Adminstrator.
CD к каталогу bin Oracle
Wallet может быть скопирован с одного компьютера на другой компьютер, это и есть дыра в безопасности, поэтому начиная с Oracle Release 2, вы можете остановить работу Wallet, если он будет скопирован на другой компьютер через создание локального wallet, используя команду "orapki", вместо того, чтобы использовать "mkstore" как в Oracle 10g.
Используйте команду создать Wallet "orapki".
СУБД Oracle Database с годами постепенно совершенствует свои криптографические возможности. В Oracle8i появился пакет DBMS_OBFUSCATION_TOOLKIT, а в версии Oracle 10.1 — пакет DBMS_CRYPTO, предназначенный для реализации криптографии. И набор инструментов,и пакет DBMS_CRYPTO требуют применения криптографических ключей и обращения к API-интерфейсу для выполнения необходимых операций шифрования/дешифрации.
Зачем нужны шифрованные табличные пространства
В Oracle Database было представлено новое средство прозрачного шифрования данных — Transparent Data Encryption (TDE), которое позволяет легко шифровать данные столбцов в таблице. Шифрование называется прозрачным, потому что база данных Oracle заботится обо всех деталях шифровки и дешифровки, не требуя ручного управления таблицами и триггерами для расшифровки данных. Теперь в Oracle Database 11g можно шифровать все табличное пространство, просто используя пару специализированных конструкций во время создания табличного пространства. Шифрование табличного пространства оберегает находящиеся в нем данные от неавторизованного доступа прямым обращением к файлам операционной системы. Шифрование позволяет безопасно пересылать носитель резервной копии во внешнее хранение или другие места.
Когда вы шифруете столбцы таблицы, появляются ограничения, накладываемые на некоторые запросы. Шифруя все табличное пространство, от некоторых из этих ограничений можно избавиться. Например, в Oracle Database 10g вы не можете шифровать столбец, если он является частью внешнего ключа или участвует в другом ограничении базы данных. Шифровка всего табличного пространства снимает это ограничение.Ниже перечислены дополнительные соображения в пользу применения шифрования на уровне табличного пространства:
- индексы, основанные на функциях;
- сканирование индексов по диапазону;
- ограничения типов данных;
- секционирование таблиц (разбиение на разделы/подразделы).
Шифрование табличного пространства зависит от средства прозрачного шифрования базы данных Oracle, которое требует создания и поддержки репозитория доверительной информации, называемого Oracle Wallet и предназначенного для хранения криптографического мастер-ключа базы данных.
Создание Oracle Wallet
Oracle Wallet — это контейнер, предназначенный для хранения доверительной информации (мандатов) аутентификации и подписей. Средство шифрования табличного пространства полагается на Oracle Wallet в хранении и защите мастер-ключа, используемого для шифрования. Существуют два вида Oracle Wallet — шифруемые и авто-открываемые.Вы должны вручную открыть шифруемый бумажник (wallet) после создания базы данных, в то время как авто-открываемый бумажник открывается автоматически при запуске базы данных. Шифруемый бумажник обычно рекомендуется для шифрования табличного пространства, если только вы не имеете дело с необслуживаемыми средами Oracle Data Guard; в этом случае автоматическое открытие бумажника очень удобно.
На заметку! Хотя вы не можете создавать шифруемое табличное пространство undo или временное табличное пространство, когда база данных пишет данные из любого шифруемого или временного табличного пространства (или же файлов журналов повторного выполнения), она автоматически шифрует эти данные. Таким образом, вам не нужно шифровать табличные пространства undo и временные табличные пространства.
Oracle Wallet, который в действительности является файлом в вашей системе каталогов, называется ewallet.p12 — как в Windows, так и в UNIX/Linux. Местоположение этого файла специфично для операционной системы. Однако можно специфицировать местоположение, отличающееся от стандартного, используя параметр ENCRYPTION_WALLET_LOCATION в файле sqlnet.ora:
Для использования TDE необходимо иметь привилегию ALTER SYSTEM и пароль для доступа к Oracle Wallet. Если у вас нет Oracle Wallet, потребуется создать его и затем добавить к нему мастер-ключ. Это можно сделать несколькими способами:
- вызвав Oracle Wallet Manager через графический интерфейс;
- вызвав Oracle Wallet Manager командой owm в командной строке;
- используя команду mkstore в командной строке операционной системы.
Совет. Используйте следующий синтаксис для создания Oracle Wallet из операционной системы:
Однако простейший способ создания Oracle Wallet заключается в выдаче оператора SQL, и здесь мы используем именно этот метод. Прежде чем создать Oracle Wallet,вы должны сначала создать каталог по имени wallet внутри каталога $ORACLE_BASE/admin/$ORACLE_SID. Если вы не сделаете этого, то получите ошибку ORA-28368: “Cannot auto-create wallet” (“не удается создать бумажник”). Наиболее простой способ создания Oracle Wallet предусматривает применение следующей команды в среде SQL*Plus:
Показанный здесь оператор ALTER SYSTEM и создает Oracle Wallet, если он еще не существует, и добавляет к нему мастер-ключ. Разумеется, на месте "пароль" необходимо указать ваш собственный пароль.
Оператор ALTER SYSTEM, приведенный выше, работает следующим образом:
- если Oracle Wallet уже существует, оператор его открывает и создает (или пересоздает) мастер-ключ шифрования;
- если у вас еще нет Oracle Wallet, он создается, открывается, после чего создается новый мастер-ключ
Успешно создав Oracle Wallet, вы готовы шифровать табличные пространства, используя новое средство шифрования табличных пространств.
Создание шифрованного табличного пространства
После создания Oracle Wallet очень просто создать шифрованное табличное пространство. Оператор создания шифрованного табличного пространства имеет следующий синтаксис:
Конструкция ENCRYPTION во второй строке в действительности не шифрует табличное пространство. Вы просто задаете свойства шифрования, устанавливая значения для ключевого слова ENCRYPTION. С помощью конструкции USING можно указать имя применяемого алгоритма шифрования, такого как 3DES168, AES128, AES192 и AES256,если вы не хотите использовать алгоритм AES128, принятый по умолчанию. В этом случае можно вообще опустить конструкцию USING.
Ключевое слово ENCRYPT, переданное конструкции STORAGE в третьей строке, выполняет собственно шифрование табличного пространства. Далее мы посмотрим, как зашифровать табличное пространство.
Ниже приведен пример, демонстрирующий создание простого шифрованного табличного пространства, которое по умолчанию использует шифрование DES128. Поскольку специфицировать уровень шифрования по умолчанию не нужно, конструкция USING в строке 3 не указывается.
Новый столбец encrypted в таблице DBA_TABLESPACES позволяет увидеть статус шифрования табличного пространства:
Отсюда видно, что табличное пространство encrypt1 зашифровано.
Если запросить представление V$ENCRYPTED_TABLESPACES, можно увидеть имя и алгоритм шифрования всех шифрованных табличных пространств в базе данных:
Современное популярное программное обеспечение, использующее последние версии Oracle, зачастую задействует драйверы и вызовы библиотек, разработанные более 15-ти лет назад для версии 8 или даже 7. Это обусловлено сложившимся мнением о сложности программирования на Oracle Call Interface и нежеланием разработчиков современных языков и платформ обновлять промежуточный интерфейс к базе данных.
В то же время, за последние годы OCI претерпел значительные изменения, упростившие процесс разработки и сделавшие его сравнительно простым и изящным.
В предлагаемой заметке я привожу пример работающей программы, демонстрирующей современные способы программирования на OCI, прозрачное использование Юникод, подключение к базе данных без пароля через Oracle Wallet и посредством только библиотек легковесного instant client. Я надеюсь убедить читателя в том, что программирование на современном OCI практически не отличается по сложности от непосредственной работы с библиотеками SQLite и Apache APR, предоставляя при этом большой выигрыш в эффективности программ. Используя OCI в вашем проекте "напрямую", вы сможете исключить несколько "слоёв" устаревшего кода, выполняя SQL запросы и получая результаты из базы быстрее и с меньшими затратами ресурсов компьютеров сервера и клиента.
Прежде чем мы продолжим, я хотел бы привести строки из Евангелия:
. == От Матфея святое благовествование == .
=== Глава 7, Стих 2 ===
1 Не судите, да не судимы будете,
2 ибо каким судом судите, таким будете судимы; и какою мерою мерите,
такою и вам будут мерить.
3 И что ты смотришь на сучок в глазе брата твоего, а бревна в твоем глазе не
чувствуешь?
4 Или как скажешь брату твоему: "дай, я выну сучок из глаза твоего", а вот, в
твоем глазе бревно?
5 Лицемер! вынь прежде бревно из твоего глаза и тогда увидишь, как вынуть
сучок из глаза брата твоего.
6 Не давайте святыни псам и не бросайте жемчуга вашего перед свиньями, чтобы
они не попрали его ногами своими и, обратившись, не растерзали вас.
Лично для вас благая весть - Единородный Сын Божий Иисус Христос любит вас, Он взошёл на крест за ваши грехи, был распят и на третий день воскрес, сел одесную Бога и открыл нам дорогу в Царствие Небесное.
Отец наш Бог любит нас настолько сильно, что пожертвовал Своим Сыном для нашего с вами спасения, дорогой читатель. Насколько же безмерна и велика любовь Божия к нам, грешникам! И эта любовь распространяется на всех людей - всем нам Господь даёт возможность спастись через покаяние. При этом Сам Бог задерживает до времени Страшный Суд, чтобы больше спаслось.
Что же делаем мы с вами? Люди, грешившие всю свою жизнь - мы судим наших братьев и сестёр, хотя не имеем на это никакого права! Встречаясь в повседневной жизни, мы так быстро осуждаем своих родных, коллег, знакомых, соседей. Составляем мнения, распространяем сплетни, перешёптываемся за спиной. А ведь на самом деле мы имеем право осуждать только себя самих, ведь за нами самими числится столько, что может и всей жизни не хватить на искупление. Если подумать об этом - сразу же понятно что некогда нам осуждать других - дал бы Бог в нашем собственном спасении преуспеть, ибо грехов-то так много, что тянут и гнут к земле, как тот самый мельничный жёрнов на шее!
Покайтесь, примите Иисуса как вашего Спасителя, ибо наступают последние времена и время близко - стоит Судья у ворот.
Пожалуйста, в своих каждодневных трудах, какими бы занятыми вы себе ни казались - находите время для Бога, Его заповедей и Библии.
На главной странице этого сайта вы найдете программу для чтения Библии в командной строке - буду очень рад если программа окажется полезной. Пожалуйста, читайте Библию, на экране или в печатном виде - вы будете искренне удивлены как много там сказано лично про вас и ваши обстоятельства.
Вернёмся к нашим техническим деталям.
В начале заметки я подробно рассмотрю общий процесс создания Oracle wallet и подключения к базе. Этот подход будет использоваться и в программе, не требующей ни имени пользователя, ни пароля.
После удачной компиляции программа сможет подключаться к базе данных, читать SQL запрос пользователя из потока стандартного ввода, подготавливать и выполнять запрос, эффективно получать из базы набор данных результата и выводить его в поток стандартного вывода в виде CSV строк, выводить статистику выполнения запроса (stats, events / waits, IO).
Даже в таком упрощённом виде программа оказывается полезной для оценки производительности сервера и для тестирования индивидуальных SQL запросов. Но основное назначение примера - предоставить читателю "шаблон" современной OCI программы для последующего наращивания функциональности.
Создание Oracle wallet и подключение к базе без пароля
Создание внешнего хранилища паролей будет изначально производится на сервере базы данных Oracle, а затем созданные контейнеры будут перенесены на компьютер клиента.
Подготовка внешнего хранилища паролей на сервере БД
Подготовим директории для хранения нашего Oracle wallet. Соответствие имён пользователей операционной системы между сервером и клиентом не требуется - как видно, все действия на сервере я произвожу как linux пользователь "oracle", в то время как клиент будет использовать другое имя.
Затем создадим хранилище паролей, проверим наличие файлов и их содержание.
Как видно, wallet создан пустым. Теперь нам надо добавить в него хотя бы одну запись. Впоследствии можно превратить этот wallet в хранилище ваших логинов во все базы данных Oracle, полностью исключив ввод паролей. Для этой цели нам необходимо знать (и использовать для последующих подключений) полное доменное имя сервера базы данных. Создав запись для комбинации полного имени сервера Oracle, имени пользователя в базе и его пароля, проверим наличие добавленной информации.
Тестирование созданного Oracle Wallet
Перед использованием учётной записи из внешнего хранилища, мы должны уведомить Oracle Network Services о его местонахождении. Делается это путём внесения записей в файл "sqlnet.ora". Заметьте - мы всё ещё работаем с сервером БД.
Теперь мы попробуем произвести "локальное" подключение, использующее Oracle Wallet - программа клиент (SQLPlus) на сервере будет подключаться к базе данных на этом же самом сервере. Никакие файлы ещё не были перенесены на клиентский компьютер. Вместо имени пользователя используется "/". Обратите внимание, что такой способ подключения не имеет ничего общего с "OPS$" логинами - мой пользователь в базе данных не имеет соответствующего EXTERNAL_NAME и OS Authentication в моей базе отключена.
Напечатав в приглашении "show user" мы увидим имя "scott" - оно было записано в поле "oracle.security.client.username1" и именно под этим именем была подключена наша сессия к службе DB.
Вполне возможно что подключение не состоится, выдав ошибку "ORA-12578: TNS:wallet open failed" или подобную ей. Обнаружить причину достаточно просто - включите трассировку подключения на клиенте, установив значение TRACE_LEVEL_CLIENT=16 в "sqlnet.ora" файле (в моём примере выше эта строка уже есть, но закомментирована). Файлы трассировки наверняка будут находиться в директории $ORACLE_BASE.
Итак, мы уже нашли и устранили ошибку в разметке файла "sqlnet.ora". Попробуем подключение заново:
Нам удалось подключиться к серверу БД под именем пользователя "scott" без пароля, используя Oracle Wallet. Но до этого мы использовали библиотеки из состава "полного клиента" Оракл, находящегося на самом сервере. Теперь нам надо организовать подобный процесс на удалённом клиенте, имеющем только минимальные библиотеки из состава "instant client".
Перемещение внешнего хранилища паролей на клиентский компьютер
Поскольку мы уже убедились в работоспособности нашего wallet, просто перенесём все файлы с сервера БД на клиентский компьютер, поместив их в то же самое (или любое другое) место. Имя пользователя ОС на клиенте также не имеет значения.
Переместив файлы, мы должны изменить содержимое "sqlnet.ora" и установить переменные среды соответствующим образом. Заметьте, что сейчас я выполняю все эти действия на компьютере клиента, который подключается к серверу БД удалённо по сети и не имеет "полной" версии Oracle client. Мой клиент имеет только "облегчённую" версию Oracle Instant Client, находящуюся в "/home/user/oraclient/instantclient_12_1". Ниже я привожу полный список библиотек и файлов, находящихся в директории Instant Client:
Итак, установим необходимые переменные среды (занесите их в соответствующий файл конфигурации типа .bashrc) и отредактируем фаил "sqlnet.ora".
Тестирование Oracle Wallet на клиенте
Всё готово к тестированию нашего подключения без ввода пароля. Вначале я удостоверюсь что мой сервер БД доступен по полному имени, записанному в wallet как параметр "oracle.security.client.connect_string1". Затем я попробую подключиться к удалённой службе DB на сервере базы данных.
Подключение прошло успешно - при этом нам не пришлось вводить пароль и имя пользователя. Теоретически, мы можем их даже и не знать - и всё равно сможем работать с базой, подключаясь через wallet.
При изменении имени пользователя или его пароля в БД нам понадобится повторить процесс с самого начала или, переместив wallet обратно на сервер БД, обновить учётную запись (через "mkstore -modifyCredential") и вернуть wallet на компьютер "облегчённого" клиента. На практике смена паролей не представляет затруднений - храня копии нужных wallet на сервере БД, все их можно обновлять централизовано и затем "выгружать" на клиентов после изменения записей пользователей в базе данных Oracle.
Исходный код "шаблона" современной OCI программы
Теперь, когда мы можем подключаться к БД без ввода пароля в SQL*Plus, посмотрим как можно применить этот же подход в пользовательской программе. Загрузите по ссылке внизу исходный текст - я старался комментировать каждый шаг и уверен что у вас не возникнет трудностей с компиляцией и запуском программы.
В этой заметке я не буду рассматривать логику программы и её работу - для этого существует исходный код. В самом начале я рассказал вкратце о возможностях программы. Повторю, что я старался показать простоту использования Oracle Call Interface и его гибкость и эффективность.
Для компиляции программы вам понадобится дополнительный Instant Client Package - SDK: Additional header files and an example makefile for developing Oracle applications with Instant Client.
Читайте также: