Dataincrement 2 - Разрешение Противоречий, Триз В Реальном Развитии

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

Первая проблема — отсутствие SSL-сертификата на сайте.

А во-вторых, раскрывать кому бы то ни было пароли доступа — крайне сомнительная идея.

Решение первой проблемы чисто техническое – установить бесплатный сертификат не очень сложно.

А вот решение второй проблемы — исключить раскрытие параметров подключения к вашей базе данных — под вопросом.

Напомню, суть проекта — онлайн-клиент для базы данных mysql. Ключевой вопрос — подключение к базе данных, что сразу вызывает несколько сложностей:

  1. Раскрытие параметров подключения к базе данных;
  2. Даже если параметры раскрыты, не факт, что вам удастся подключиться из-за административных ограничений, например, разрешен только локальный доступ к базе данных.

В этой ситуации становится очевидным техническое противоречие (ТС) в системе триз.

Вам необходимо раскрыть параметры для подключения, но при этом вы не можете раскрывать параметры из соображений безопасности.

Кроме того, раскрытие параметров не решает вторую трудность – наличие административных ограничений.

В Тризе один из моих любимых методов — метод идеального конечного результата (ИКР).

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

Итак, по словам Триза, я могу мысленно перевернуть проблему с ног на голову.

И начать решать проблему с другого конца.

  • Был.

    Сайт хочет подключиться к вашей частной внутренней базе данных и хочет сделать это, не раскрывая пароли доступа (идеальный конечный результат).

  • А что если наоборот? Сама база данных хочет подключиться к стороннему сайту, но не может этого сделать из-за административных ограничений.

С одной стороны, это оказалась песня (ты на суше, я на море.

мы никогда не встретимся).

С другой стороны, есть две силы, которые хотят встретиться, но не могут этого сделать.

Казалось бы, какая земля, какое море? А вот базы данных и серверы.

Но ждать.

Все мы знаем, что часто бывает так, что девочке нравится мальчик и, наоборот, этому мальчику нравится та же самая девушка.

Они боятся сделать шаг навстречу друг другу.

Я не могу сделать это сам.

Это невозможно.

Но тут неожиданно неожиданно у обоих несчастных появляется общая девушка.

Друг знакомит и сводит двух застенчивых парней.

А дальше все как-то само собой получается.

Здесь важно отметить, что без появления третьей силы нам не обойтись.

Так же, как и триз – нужно ввести в систему третью силу (система двух сил считается неполной) и завершить треугольник.

Сводник выступил в роли третьей силы и свел мальчика и девочку вместе.

Еще один пример из политики.

Есть Германия, которая хочет покупать более дешевое топливо.

Есть Иран, который хочет продавать топливо Германии.

Но в Германии действуют строгие административные ограничения на поставки топлива из Ирана.

Дополним систему двух сил полным треугольником.

Введем третью силу – это Россия.

Которая может взаимодействовать как с Германией, так и с Ираном.

В результате Германия хорошо взаимодействует с Ираном через транспорт в лице России.

Значит, нужна третья сила.

Вносим в неполную систему третью силу из базы данных и клиента.

В качестве транспорта мы будем использовать некоего водителя, который будет выполнять роль передатчика (слово здесь конечно грубое, но вполне уместное, если не зацикливаться на хамстве).

Перечислим требования к нашему водителю транспорта.

На самом деле требований всего два:

  1. Должен без ограничений взаимодействовать как с клиентом, так и с базой данных, выступая в роли транспорта.

  2. Должна быть возможность подключения к базе данных
Давайте посмотрим на первое требование.

Обеим силам нужно одно и то же.

А именно: вам нужно отправлять запросы и взамен получать набор данных для отображения.

Естественно, в качестве канала передачи данных используется Интернет. Давайте посмотрим на второе требование.

Подключение к базе данных возможно только на стороне базы данных и никак иначе.

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

Что обычно является значением по умолчанию, возможно.

MySQL используется для веб-приложений.

Учитывая перечисленные требования, получается, что все, что мне нужно сделать, это написать простой скрипт, который транслирует запросы в базу данных и возвращает результаты в виде массива строк.

И поместите его где-нибудь на стороне базы данных.

Я беру php потому что умею и пишу буквально двадцать строк.



Код

   

header('Content-Type: text/html; charset=utf-8'); # Key $pass = 'KEY_PASS_FROM_DATAINCREMENT'; //change for youself # Connect parametres to mysql database $host = 'LOCALHOST'; //change for youself $user = 'USERNAME'; //change for youself $password = 'PASSWORD'; //change for youself $database = 'DATABASE_NAME'; //change for youself # Access if ( !isset($_POST['query']) ) die( 'no query' ); if ( @$_POST['pass'] != md5($pass) ) die( 'no pass' ); // if ( $_SERVER['REMOTE_ADDR'] != '185.229.9.9' ) die( 'no ip' ); # Connect $mysqli = new mysqli($host, $user, $password, $database); if ( $mysqli->connect_error ) { die( 'no connect: ' .

$mysqli->connect_error ); } # Character $mysqli->set_charset( $mysqli->query("SHOW VARIABLES LIKE 'character_set_database'")->fetch_object()->Value ); # Query & Return if ( $result = $mysqli->query($_POST['query'], MYSQLI_USE_RESULT) ) { for ( $rows = array(); $r = $result->fetch_array(MYSQLI_ASSOC); $rows[] = $r ); $rows = json_encode($rows); $rows = gzdeflate($rows, 9); die( $rows ); } die( $mysqli->error );

Это такой простой драйвер.

Теперь остается только разместить этот скрипт где-нибудь на вашем сайте в произвольном месте.

И прописываем этот драйвер на клиенте - dataincrement.com указав его как соединение с вашей базой данных.

Таким образом можно было подключиться к базе данных, принципиально не раскрывая параметры подключения.

А также обход административных ограничений.

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

Например, всего в пару дополнительных строк можно добавить историю запросов или ограничить доступ только с определенных IP.

Заключение

На этом примере я попытался показать силу триза в разрешении, казалось бы, парадоксальных противоречий.

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

Для кого неважно бизнес – это миссия, неважно проект – это вера во все хорошее вопреки всему плохому.

Теги: #Алгоритмы #Анализ и проектирование систем #php #интерфейсы #проектирование и рефакторинг #triz #dataincrement

Вместе с данным постом часто просматривают: