DataIncrement 2 - resolución de conflictos, TRIZ en desarrollo real

La última vez, a partir de los comentarios, resultó señalar dos problemas específicos del proyecto, por lo cual muchas gracias a los usuarios indiferentes. El primer problema es la falta de un certificado SSL en el sitio. Y segundo, revelar contraseñas de acceso a cualquier otra persona es una idea extremadamente dudosa.

La solución al primer problema es puramente técnica: la instalación de un certificado gratuito no causa mucha dificultad.

Pero la solución al segundo problema, excluir la divulgación de la configuración para conectarse a su base de datos, es la pregunta.

Permítame recordarle que la esencia del proyecto es un cliente en línea para la base de datos mysql. La pregunta clave: conectarse a la base de datos, inmediatamente causa varias dificultades:

  1. Divulgación de los parámetros de conexión de la base de datos;
  2. Incluso si se revelan los parámetros, no es un hecho que pueda conectarse debido a restricciones administrativas, por ejemplo, solo se permite el acceso local a la base de datos.

En esta situación, se corta una contradicción técnica (TP) en el sistema Triz. Es necesario revelar parámetros para conectarse, pero al mismo tiempo es imposible revelar parámetros por seguridad. Además, la divulgación de parámetros no resuelve la segunda complejidad: la presencia de restricciones administrativas.

En trize, uno de mis métodos favoritos es el método Ideal Final Result (RBI). Este es el método más fuerte que permite a las personas que no tienen miedo de pensar que parecería absurdo, pero a veces nos permite lograr los resultados deseados, donde parece que esto no es posible en absoluto.

Entonces, en un momento, puedo cambiar mentalmente la tarea. Y comience a resolver el problema desde el otro extremo.

  • Fue. El sitio quiere conectarse a su base de datos interna privada y quiere hacerlo sin revelar contraseñas de acceso (Resultado final ideal).
  • Y si viceversa. La base de datos en sí misma quiere conectarse a un sitio de terceros, pero no puede hacerlo debido a restricciones administrativas.

Por un lado, resultó una canción (estás en tierra, estoy en el mar ... no podemos encontrarnos de ninguna manera). Por otro lado, hay dos fuerzas que quieren reunirse, pero no pueden hacer esto.

Parecería qué tierra, qué mar? Y aquí la base de datos y el servidor. Pero espera Todos sabemos que a menudo sucede que a una niña le gusta un niño y viceversa, a la misma niña le gusta este niño. Tienen miedo de dar un paso el uno hacia el otro. No puedo hacerlo yo mismo. Esto no es posible. Pero de repente aparece una novia común. Una novia presenta y reúne dos cosas tímidas. Y luego todo por sí mismo resulta de alguna manera.

Es importante señalar aquí que la aparición de una tercera fuerza es indispensable. Al igual que en un triz: debe ingresar una tercera fuerza en el sistema (un sistema de dos fuerzas se considera incompleto) y terminar el triángulo. El procurador actuó como una tercera fuerza y ​​trajo al niño y la niña.

Otro ejemplo de la política. Hay Alemania que quiere comprar combustible más barato. Hay Irán que quiere vender combustible a Alemania. Pero Alemania tiene una estricta restricción administrativa sobre los suministros de combustible de Irán. Terminamos el sistema de dos fuerzas en un triángulo completo. Introducimos la tercera fuerza: esta es Rusia. Que puede interactuar con Alemania e Irán. Como resultado, Alemania está interactuando perfectamente con Irán, a través del transporte representado por Rusia.

Entonces se necesita una tercera fuerza. Llevamos la tercera fuerza a un sistema incompleto desde la base de datos y el cliente. Utilizaremos un determinado conductor como transporte, que cumplirá el papel de transmitir (la palabra aquí es ciertamente grosera, pero bastante apropiada, si no te enfocas en la rudeza).

Enumeramos los requisitos para nuestro transporte de conductor. En realidad, solo hay dos requisitos:

  1. Debe interactuar sin restricciones tanto con el cliente como con la base de datos, actuando como transporte
  2. Debe poder conectarse a la base de datos

Veamos el primer requisito. Dos fuerzas necesitan lo mismo. A saber: debe enviar solicitudes y, a cambio, recibir un conjunto de datos para mostrar. Naturalmente, Internet se usa como un canal de transmisión de datos.

Veamos el segundo requisito. La conexión a la base de datos solo es posible en el lado de la base de datos y nada más. Por lo tanto, el controlador debe estar ubicado al costado de la base de datos o poder conectarse a él, teniendo en cuenta las restricciones administrativas. Lo que suele ser el predeterminado, tal vez. mysql se usa para aplicaciones web.

Teniendo en cuenta los requisitos anteriores, resulta que es suficiente para mí escribir un simple traductor de consultas a la base de datos y devolver los resultados como una serie de cadenas. Y colóquelo en algún lugar del lado de la base de datos. Tomo php porque puedo y escribo literalmente veinte líneas.

Código


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 ); 

Aquí hay un controlador tan simple. Ahora esta secuencia de comandos debe colocarse en algún lugar de su sitio en un lugar arbitrario. Y registre este controlador en el cliente, especificando dataincrement.com como una conexión a su base de datos.

Por lo tanto, resultó conectarse a la base de datos sin revelar los parámetros de conexión en principio. Y también eludiendo las restricciones administrativas. Además, el controlador resultó ser tan simple y comprensible que puede modificarse fácilmente a voluntad e implementarse independientemente en otro idioma, si es necesario. Por ejemplo, puede agregar un historial de consultas o restringir el acceso solo desde cierta IP literalmente en un par de líneas adicionales.

Conclusión


En este ejemplo, traté de mostrar la fuerza del trize para resolver contradicciones aparentemente paradójicas. Creo que el sentido común y las construcciones lógicas en las que se basa el trize y la ciencia de la lógica deberían suplantar tarde o temprano el dominio de los eclesiásticos, evangelistas y propagandistas locales. Para quien ni el negocio es misión, ni el proyecto es fe en todo lo bueno versus todo lo malo.

Source: https://habr.com/ru/post/es427723/


All Articles