Это требование моего клиента для защиты соединения нашего приложения с базой данных Oracle. В настоящее время мы используем PHP-библиотеку OCI8 (oci_connect) для подключения к Oracle с использованием учетных данных, которые мы имеем в файле конфигурации (вид обычного текста) — где мы сохраняем все наши учетные данные.
Теперь они хотят улучшить безопасность, внедрив какое-то безопасное соединение с использованием SSH, чтобы обеспечить связь между приложением и БД. Я прочитал в интернете, что это возможно.
Моя проблема в том, что я не знаю, как добиться этого с помощью библиотеки PHP OCI, даже если наш администратор реализует аутентификацию на основе SSH между сервером приложений и сервером БД, поскольку библиотека OCI использует имя пользователя и пароль для соединения с сервером БД.
Я пытаюсь понять, есть ли какой-нибудь способ, которым мы можем достигнуть этого типа аутентификационных соединений от PHP до Oracle.
Любая помощь / предложения будут оценены.
FYI. Я использую Oracle 12c Enterprise Edition.
Ответить на вторую часть — Установление безопасного соединения с использованием SSH. Мы можем попробовать использовать Oracle Wallets. Поэтому нам не нужно сохранять какой-либо простой текстовый пароль на сервере приложений.
Попробуйте подключиться из PHP к базе данных Oracle с помощью Oracle Wallet, используя следующие шаги
1 — Создать кошелек (https://docs.oracle.com/cd/B19306_01/network.102/b14266/cnctslsh.htm#g1033548)
2 — Разместите Oracle-клиент Oracle и файлы кошелька где-нибудь на сервере с PHP (например, / opt / instantclient и / opt / wallet)
3 — Запустите Apache со следующими переменными:
ORACLE_HOME=/opt/instantclient
LD_LIBRARY_PATH=/opt/instantclient
TNS_ADMIN=/opt/wallet
4 — В / opt / wallet создайте файлы tnsnames.ora с таким содержимым:
WALLET_NAME =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DB_IP)(PORT = DB_PORT))
(CONNECT_DATA = (SID = DB_SID))
)
где WALLET_NAME — это имя кошелька, выбранного при создании кошелька, DB_IP — это IP-адрес базы данных или имя хоста, DB_PORT — это порт db, а DB_SID — это sid базы данных.
5 — В / opt / wallet создайте файлы sqlnet.ora с таким содержимым:
WALLET_LOCATION =
(SOURCE =
(METHOD = FILE)
(METHOD_DATA =
(DIRECTORY = /opt/wallet)
)
)
SQLNET.WALLET_OVERRIDE = TRUE
6 — Перезапустите Apache
Со стороны PHP-кода теперь вы можете подключиться к базе данных, открыв соединение с помощью следующего кода:
$conn = oci_connect("/", "", "WALLET_NAME", null, OCI_CRED_EXT);
OCI_CRED_EXT Это говорит Oracle использовать внешнюю аутентификацию или аутентификацию ОС, которая должна быть настроена в базе данных. Флаг OCI_CRED_EXT может использоваться только с именем пользователя «/» и пустым паролем.
Других решений пока нет …