【问题标题】:MySQL replication with custom query for reverse hashesMySQL 复制与反向哈希的自定义查询
【发布时间】:2014-02-27 13:59:09
【问题描述】:

我有一个数据量快速增长的 MySQL 数据库。

我想使用一些可插入数据库的基于 Web 的工具,以便我可以分析数据并创建报告。

我们的想法是使用复制来授予对从属数据库的 R/O 访问权限,而不必担心主数据库上的安全问题(其中还包含与该项目无关的数据,但同样重要)。

主数据库包含从源进行散列 (SHA1 128) 的字符串,在从属数据库上,它们需要使用反向散列数据库返回其原始形式。

这将允许我插入从数据库(位于另一台服务器上)的任何工具直接开箱即用。

我的问题是:在以某种方式将带有提到的字符串的从数据库重塑回源格式的同时进行复制的最佳方法是什么?

示例

MASTER DB
a8866ghfde332as
a8fwe43kf3e3t42

SLAVE DB
John Smith
Rose White

从数据库应该已经包含反转的表,并且在执行查询时不应反转。

你们认为我应该如何处理这个问题? 复制是否可行?

感谢您的帮助!

编辑

我应该指定一些细节:

  • 从数据库也将包含一个反向散列(查找)表
  • 源字符串的数量有限,因此冲突风险很小
  • 最好的选择是仅将某些表复制到从属数据库,其中从属数据库在每次插入时都会进行反向哈希查找,并将反向哈希保存在另一个表(或列)中以供读取基于网络的工具

我愿意使用的这种设置主要集中在除了源(在数据库中创建记录)和从数据库本身之外,没有任何东西连接到主数据库。

通过将反向查找表放在与数据源不直接接触的数据库(从属)中,这将提高安全性。

因此,即使有人破解了源并进入主数据库,也无法检索到任何有用的数据,即哈希对象中的字符串。

【问题讨论】:

  • 哈希值不是唯一的,因此您只能检索其中一个可能的值
  • 严格来说,从属实例包含与其主实例相同的数据。您可能需要数据库中某些但不是所有表的快照或副本。 (顺便说一句,如果这是美国的健康数据,请在继续此项目之前咨询您的安全人员。)
  • 反转散列函数非常昂贵。这几乎是不可能的。
  • @Barmar,OP 说他有一个用于此目的的查找表。大概他不是指饼干的彩虹桌,而是与他的其他桌子同时填充的桌子。

标签: mysql replication union lookup sha1


【解决方案1】:

在 MySQL 中将一切从主服务器复制到从服务器更容易、更简单且最万无一失,因此请计划复制所有内容,除非您有非常令人信服的理由不这样做。

也就是说,对于从属服务器拥有主服务器没有的表,MySQL 绝对没有问题——如果主服务器上不存在模式+表名冲突的表,直接在从服务器上创建的表不会导致问题。

您不想尝试让从服务器“修复”传入的数据,因为这不是 MySQL 复制的设计目的,也不是很容易实现的。 只有,当master以语句模式将事件写入其binlog时,触发器才会在slave上的表上触发,这不像行模式那样可靠,也不像混合模式那样灵活,即使你有这个工作,然后您将失去使用表校验和比较主从数据集的能力,这是主/从复制持续维护的重要组成部分。

但是...我确实看到了一种方法来完成您想要对反向哈希表执行的操作:在从属设备上创建查找表,然后通过连接复制的表创建以所需形式重建数据的视图到查找表,并针对这些视图在从属服务器上运行查询。

当一个视图只是连接正确索引的表并且不包含任何不寻常的东西,如聚合函数(例如COUNT())或UNIONEXISTS,那么,服务器将处理对视图的查询,就像底层表一样已经使用所有可用和适当的索引直接查询......所以这种方法不应该导致显着的性能损失。实际上,您可以在主服务器上没有或不需要的从服务器上的复制表(在复制表上)声明索引(UNIQUE 索引除外,这没有意义),这些可以设计为需要特定于从属的工作负载。

【讨论】:

    【解决方案2】:

    散列函数是surjective,因此两个不同的输入可能具有相同的输出。因此,不可能准确地重建从站上的数据。

    在一个简单的层面上,并证明这一点;考虑一个整数散列函数,它恰好返回输入的平方;所以,-1 => 1, 0 => 0, 1 => 1, 2 => 4, 3 => 9 等等。现在考虑倒数,即平方根,1 => -1 & 1, 4 = > -2 & 2 等

    最好只将项目所需的特定数据复制到从站,并且不进行哈希处理。

    【讨论】:

      猜你喜欢
      • 2012-01-08
      • 2021-09-26
      • 1970-01-01
      • 2016-02-13
      • 1970-01-01
      • 2012-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多