DataIncrement 2 - resolução de conflitos, TRIZ em desenvolvimento real

Na última vez, a partir dos comentários, destacamos dois problemas específicos do projeto, pelos quais muitos agradecem a usuários indiferentes. O primeiro problema é a falta de um certificado SSL no site. Segundo, divulgar as senhas de acesso a qualquer outra pessoa é uma ideia extremamente duvidosa.

A solução para o primeiro problema é puramente técnica - a instalação de um certificado gratuito não causa muita dificuldade.

Mas a solução para o segundo problema - excluir a divulgação das configurações de conexão com o banco de dados - é a questão.

Deixe-me lembrá-lo de que a essência do projeto é um cliente online para o banco de dados mysql. A questão principal - conectar-se ao banco de dados, causa imediatamente várias dificuldades:

  1. Divulgação de parâmetros de conexão com o banco de dados;
  2. Mesmo que os parâmetros sejam divulgados, não é possível conectar-se devido a restrições administrativas, por exemplo, apenas o acesso local ao banco de dados é permitido.

Nesta situação, uma contradição técnica (TP) é cortada na face no sistema de triz. É necessário divulgar parâmetros para conectar, mas ao mesmo tempo é impossível divulgar parâmetros para segurança. Além disso, a divulgação de parâmetros não resolve a segunda complexidade - a presença de restrições administrativas.

No geral, um dos meus métodos favoritos é o método Resultado Final Ideal (RBI). Esse é o método mais forte que permite às pessoas que não têm medo de pensar aparentemente absurdas, mas é precisamente esse método que às vezes nos permite alcançar os resultados desejados, onde parece que isso não é possível.

Assim, em um teste, posso mentalmente virar a tarefa de cabeça para baixo. E comece a resolver o problema do outro lado.

  • Foi sim O site deseja se conectar ao seu banco de dados interno privado e deseja fazer isso sem divulgar senhas de acesso (resultado final ideal).
  • E se vice-versa. O próprio banco de dados deseja se conectar a um site de terceiros, mas não pode fazer isso devido a restrições administrativas.

Por um lado, saiu uma música (você está em terra, estou no mar ... não podemos nos encontrar de forma alguma). Por outro lado, existem duas forças que querem se encontrar, mas não podem fazer isso.

Parece que terra, que mar? E aqui o banco de dados e servidor. Mas espera. Todos sabemos que muitas vezes acontece que uma garota gosta de um garoto e vice-versa a mesma garota gosta desse garoto. Eles têm medo de dar um passo em direção ao outro. Eu não posso fazer isso sozinho. Isto não é possível. Mas, de repente, uma namorada comum aparece de repente. Uma namorada apresenta e reúne duas coisas tímidas. E então tudo por si só acaba de alguma forma.

É importante notar aqui que não se pode prescindir do aparecimento de uma terceira força. Assim como em um teste - você precisa inserir uma terceira força no sistema (um sistema de duas forças é considerado incompleto) e terminar o triângulo. O procurador agiu como uma terceira força e trouxe o menino e a menina.

Outro exemplo da política. Há a Alemanha que quer comprar combustível mais barato. O Irã quer vender combustível para a Alemanha. Mas a Alemanha tem uma restrição administrativa rígida ao fornecimento de combustível do Irã. Terminamos o sistema de duas forças para um triângulo completo. Introduzimos a terceira força - esta é a Rússia. Que pode interagir com a Alemanha e o Irã. Como resultado, a Alemanha está interagindo perfeitamente com o Irã, através de transportes representados pela Rússia.

Portanto, uma terceira força é necessária. Conduzimos a terceira força para um sistema incompleto a partir do banco de dados e do cliente. Usaremos um determinado motorista como transporte, que cumprirá o papel de transmitir (a palavra aqui é certamente rude, mas bastante apropriada, se você não se concentrar na grosseria).

Listamos os requisitos para o nosso transporte de motorista. Na verdade, existem apenas dois requisitos:

  1. Ele deve interagir sem restrições com o cliente e o banco de dados, atuando como um transporte
  2. Deve ser capaz de se conectar ao banco de dados

Vamos olhar para o primeiro requisito. Duas forças precisam da mesma coisa. A saber: você precisa enviar solicitações e, em troca, receber um conjunto de dados para exibição. Naturalmente, a Internet é usada como um canal de transmissão de dados.

Vamos olhar para o segundo requisito. A conexão com o banco de dados é possível apenas no lado do banco de dados e nada mais. Portanto, o driver deve estar localizado ao lado do banco de dados ou ser capaz de se conectar a ele, levando em consideração as restrições administrativas. O que geralmente é o padrão, talvez. O mysql é usado para aplicações web.

Dado os requisitos acima, verifica-se que basta escrever um tradutor de scripts simples de consultas no banco de dados e retornar os resultados como uma matriz de strings. E coloque-o em algum lugar no lado do banco de dados. Eu tomo php porque eu posso escrever literalmente vinte linhas.

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

Aqui está um driver tão simples. Agora, esse script precisa ser colocado em algum lugar do seu site em um local arbitrário. E registre esse driver no cliente - dataincrement.com, especificando como uma conexão com seu banco de dados.

Assim, acabou por se conectar ao banco de dados sem divulgar os parâmetros de conexão em princípio. E também ignorando restrições administrativas. Além disso, o driver mostrou-se tão simples e compreensível que pode ser facilmente modificado à vontade e implementado independentemente em outro idioma, se necessário. Por exemplo, você pode adicionar um histórico de consultas ou restringir o acesso apenas a partir de determinado IP, literalmente, em algumas linhas adicionais.

Conclusão


Neste exemplo, tentei mostrar a força do prêmio na resolução de contradições aparentemente paradoxais. Acredito que o senso comum e as construções lógicas nas quais o prêmio se baseia e a ciência da lógica devem, mais cedo ou mais tarde, suplantar o domínio de clérigos, evangelistas e propagandistas caseiros. Para quem nem os negócios são missão, nem projeto é fé em tudo de bom versus tudo de ruim.

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


All Articles