Я создаю веб-сайт (PHP7 на Win2012r2 с Apache 2.4 / JS) для помощи службе поддержки. Искомая информация - это в основном информация о компьютерах, пользователях и Active Directory. Некоторые другие ресурсы, такие как MSSQL и некоторые устаревшие приложения, запускаемые из строки CMD, также предоставляют информацию. Информация также должна быть запрошена с мобильных устройств для инженеров технической поддержки.
В 80% случаев служба поддержки может использовать последние данные, но не в реальном времени. Я установил кучу сценариев PHP и сценариев PS для сбора соответствующих данных, поместил их в базу данных MySQL и позволил веб-сайту службы поддержки запрашивать эту информацию (либо статическую, либо с помощью AJAX).
В 20% случаев инженеры службы поддержки или службы поддержки нуждаются в просмотре жизнеспособных данных для устранения неполадок, когда у них есть пользователь на телефоне. Теперь моя дилемма состоит в том, как сделать эти данные доступными с приемлемой скоростью (скажем, за несколько секунд), но это должно быть сделано безопасным способом!
Пока пробовал / считал:
1) Сделайте веб-запрос триггером MySql, используя sys_exec (), чтобы запустить внешний скрипт для получения данных. Проблема: sys_exec () не является родным MySql и небезопасно, поскольку он доступен всем пользователям MySql.
2) Пусть веб-запрос (PHP) запускает exec для запуска скрипта, получающего данные. Проблема: вам нужно дать PHP-скрипту, который запускает exec, слишком много прав, что опять же (очень) небезопасно.
3) Несколько способов, с помощью которых веб-запрос помещает строку в таблицу памяти MySql (позволяет называть ее 'todo') и имеет сценарий из позиции с большим количеством прав и вне среды веб-сервера (но на том же сервере), опрашивает 'todo ', выполнить запрос и вернуть результат в другую таблицу. Хотя эта установка имеет как минимум 5 препятствий для потенциального хакера, что делает ее вполне безопасной, она полагается на опрос как от запрашивающей стороны, так и от исполняемого backend-скрипта, что замедляет ее работу. Несмотря на то, что он медленный, в настоящее время я считаю его лучшим выбором.
4) используйте сетевое соединение (localhost) между запрашивающим PHP и скриптом, который собирает данные. Проблема: это может работать только в режиме «запустил и забыл», поскольку запрашивающий PHP может выполнять только UDP-запрос с правами по умолчанию. Для правильного TCP-соединения запрашивающему PHP-скрипту потребуются права root / Admin, что небезопасно. Хотя миграция с запуском и забыванием работает, если прослушивающий «сценарий сбора» возвращает свои данные в таблицу temp-memory-table в mysql, потребуются обширные циклы проверки состояния / ошибок и повторный опрос.
5) используйте PHP напрямую, чтобы получить, например. Данные SNMP, WMI, MSSql и MySql. Хотя SNMP и MySql очень легко реализовать, вызовы MSSQL и особенно WMI очень сложно (по крайней мере, для меня) заставить правильно работать на PHP7 на сервере Windows2012R2.
Есть ли у кого-нибудь идеи, как я могу получить данные из различных источников, передаваемые обратно в запрашивающий скрипт PHP, не делая эту настройку серьезной угрозой безопасности? Или, может быть, даже лучше, хорошее исправление, чтобы заставить MSSQL и особенно WMI работать под PHP7, запущенным из windows2012r2?