DataIncrement 2-紛争解決、実際の開発におけるTRIZ

前回、コメントから、プロジェクトの2つの特定の問題を特定することが判明しました。これは、無関心なユーザーのおかげです。 最初の問題は、サイトにSSL証明書がないことです。 そして第二に、アクセスパスワードを他の誰かに開示することは非常に疑わしい考えです。



最初の問題の解決策は純粋に技術的なものです。無料の証明書をインストールしても、それほど難しくありません。



しかし、データベースに接続するためのパラメーターの開示を除外するという2番目の問題の解決策は疑問です。



プロジェクトの本質はmysqlデータベースのオンラインクライアントであることを思い出させてください。 重要な質問-データベースに接続すると、すぐにいくつかの問題が発生します。



  1. データベース接続パラメーターの開示。
  2. パラメータが開示されていても、管理上の制限のために接続できるという事実ではありません。たとえば、データベースへのローカルアクセスのみが許可されています。


この状況では、trizシステムの顔で技術的矛盾(TP)がカットされます。 接続するためにパラメータを公開する必要がありますが、同時にセキュリティのためにパラメータを公開することは不可能です。 さらに、パラメータの開示は、管理上の制限の存在という2番目の複雑さを解決しません。



簡単に言えば、私のお気に入りのメソッドの1つは、理想的な最終結果(RBI)メソッドです。 これは、怖がっていない人が不合理だと思うことを可能にする最も強力な方法ですが、それが不可能なように思える場合でも、望ましい結果を達成できる場合があります。



だから、トリッツでは、私は精神的にタスクを逆さまにすることができます。 そして、反対側から問題の解決を始めます。





一方で、それは歌になりました(あなたは陸にいます、私は海にいます...どうにも会えません)。 一方、会いたいがこれを行うことはできません2つの力があります。



どの陸地、どの海か? そして、ここでデータベースとサーバー。 しかし、待ってください。 私たちは皆、女の子が男の子を好むこと、そして逆に同じ女の子がこの男の子を好むことがしばしば起こることを知っています。 彼らはお互いに向かって一歩を踏み出すことを恐れています。 自分ではできません。 これは不可能です。 しかし、突然、一般的なガールフレンドが突然現れます。 ガールフレンドが2つの恥ずかしがり屋を一緒に紹介します。 そして、それ自体がすべて何らかの形で判明します。



ここで、第三の力の出現が不可欠であることに注意することが重要です。 trizのように-システムに3番目の力を入力し(2力システムは不完全と見なされます)、三角形を終了する必要があります。 検察官は第三軍として行動し、少年と少女を連れてきました。



政治からの別の例。 より安い燃料を買いたいドイツがあります。 ドイツに燃料を販売したいイランがあります。 しかし、ドイツにはイランからの燃料供給に対する厳しい管理上の制限があります。 2つの力のシステムを完全な三角形に仕上げます。 第三の力を紹介します-これはロシアです。 ドイツとイランの両方と対話することができます。 その結果、ドイツはロシアに代表される輸送を通じてイランと完全に相互作用しています。



したがって、第三の力が必要です。 データベースとクライアントから3番目の力を不完全なシステムに追い込みます。 特定のドライバーをトランスポートとして使用します。これは送信の役割を果たします(ここで言う言葉は確かに失礼ですが、失礼に焦点を当てない場合は非常に適切です)。



ドライバートランスポートの要件をリストします。 実際には、2つの要件のみがあります。



  1. トランスポートとして機能し、クライアントとデータベースの両方と制限なく対話する必要があります
  2. データベースに接続できる必要があります


最初の要件を見てみましょう。 2つの力には同じものが必要です。 つまり、リクエストを送信し、代わりに表示用のデータセットを受信する必要があります。 当然、インターネットはデータ伝送チャネルとして使用されます。



2番目の要件を見てみましょう。 データベースへの接続はデータベース側でのみ可能であり、それ以外は何もできません。 そのため、ドライバーはデータベースの側に配置するか、管理上の制限を考慮してデータベースに接続できる必要があります。 たぶん通常はデフォルトです。 mysqlはWebアプリケーションに使用されます。



上記の要件を考えると、データベースへのクエリの簡単なスクリプトトランスレータを作成し、結果を文字列の配列として返すだけで十分であることがわかりました。 そして、データベース側のどこかに配置します。 文字どおり20行を記述できるので、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からのアクセスのみを文字列で追加行に追加したりできます。



おわりに



この例では、一見逆説的な矛盾を解決する上でのトライズの強さを示しようとしました。 私は常識と、この常識が根拠とする論理的構造と論理学が、遅かれ早かれ、自国の教会員、伝道者、宣伝者の優位性に取って代わるべきだと信じています。 ビジネスは使命でも、プロジェクトでも、すべての善とすべての悪に対する信仰ではありません。



All Articles