DataIncrement 2-解决冲突,在实际开发中为TRIZ

上一次,从评论中可以看出,该项目有两个特定问题,这要归功于用户的冷漠。 第一个问题是站点上缺少SSL证书。 其次,向其他任何人公开访问密码是一个非常可疑的想法。

第一个问题的解决方案纯粹是技术性的-安装免费证书不会造成太大困难。

但是,第二个问题的解决方案是-排除公开连接数据库设置的问题。

让我提醒您,该项目的本质是mysql数据库的在线客户端。 关键问题-连接到数据库会立即引起一些困难:

  1. 披露数据库连接参数;
  2. 即使公开了参数,由于管理上的限制,例如连接只允许对数据库的本地访问也不是可以连接的事实。

在这种情况下,triz系统中的面部出现了技术矛盾(TP)。 必须公开参数才能进行连接,但同时也无法公开用于安全性的参数。 另外,参数的公开不能解决第二个复杂性-管理限制的存在。

在Trize中,我最喜欢的方法之一是理想最终结果(RBI)方法。 这是最强大的方法,它使那些不惧怕它的人看起来很荒谬,但有时它使我们达到了预期的结果,而这似乎根本是不可能的。

因此,在琐事中,我可以将任务颠倒过来。 并从另一端开始解决问题。

  • 是的 该站点希望连接到您的私有内部数据库,并且希望这样做而不泄露访问密码(理想的最终结果)。
  • 反之亦然。 数据库本身希望连接到第三方站点,但是由于管理上的限制,无法这样做。

一方面,结果是一首歌(您在陆地上,我在海上……我们无法以任何方式相遇)。 另一方面,有两个势力想见面,但不能这样做。

似乎是什么土地,什么海洋? 这里是数据库和服务器。 但是等等。 我们都知道,经常有一个女孩喜欢一个男孩,反之亦然,一个女孩喜欢这个男孩。 他们害怕迈出彼此的一步。 我自己做不到 这是不可能的。 但是突然之间,一个普通的女朋友突然出现了。 一位女友介绍并把两个害羞的东西放在一起。 然后一切都会以某种方式出现。

在此必须指出,第三支部队的出现是必不可少的。 就像在Triz中一样,您需要在系统中输入第三力(认为两力系统不完整)并完成三角形。 检察官充当第三势力,带走了男孩和女孩。

政治方面的另一个例子。 有德国想要购买便宜的燃料。 有伊朗想向德国出售燃料。 但是德国对伊朗的燃料供应有严格的行政限制。 我们将两个力的系统完成为一个完整的三角形。 我们介绍第三支部队-这是俄罗斯。 可以与德国和伊朗互动。 结果,德国通过以俄罗斯为代表的运输与伊朗完美地互动。

因此,需要第三力量。 我们将第三种力量从数据库和客户端驱动到一个不完整的系统中。 我们将使用特定的驱动程序作为传输工具,该驱动程序将完成传输的作用(这里的词当然很粗鲁,但是如果您不关注粗鲁的话,则非常合适)。

我们列出了驾驶员运输的要求。 实际上,只有两个要求:

  1. 它应该不受限制地与客户端和数据库进行交互,作为传输
  2. 必须能够连接到数据库

让我们看看第一个要求。 两种力量需要同一件事。 即:您需要发送请求,然后接收要显示的数据集。 自然地,互联网被用作数据传输通道。

让我们看第二个要求。 连接到数据库只能在数据库端进行,而不能进行其他任何操作。 因此,考虑到管理限制,驱动程序必须位于数据库一侧或能够连接到数据库。 可能通常是默认值。 mysql用于Web应用程序。

鉴于上述要求,事实证明,对于我来说,向数据库编写一个简单的查询脚本翻译器并将结果作为字符串数组返回就足够了。 并将其放在数据库一侧。 我选择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限制访问。

结论


在这个例子中,我试图展示这种琐事在解决看似矛盾的矛盾方面的优势。 我认为,常识和以琐事为基础的逻辑结构以及逻辑科学迟早应取代本土教会,传福音士和宣传家的统治地位。 对于他们来说,无论是生意还是使命,都不是对一切善与恶的信念。

Source: https://habr.com/ru/post/zh-CN427723/


All Articles