在MySQL中存储分层网络数据以供PHP使用

时间:2013-03-01 22:56:47

标签: php mysql

我正在开发一个将IPv4网络存储在数据库中的项目,该网络作为无符号整数存储在一列中,位掩码长度(cidr)存储在另一列中。每个网络由用户“拥有”(指向“用户”表的无符号整数)。子网也以分层方式排列,例如

1.0.0.0/16 - owned by user 'A'
 1.0.1.0/24 - owned by user 'B'
 1.0.2.0/24 - owned by user 'C'
  1.0.2.0/26 - owned by user 'D'
 1.0.3.0/24 - owned by user 'E'

现在棘手的一点是因为每个用户都应该能够查看/编辑它们下的所有子网,因此上面的用户'A'可以访问所有显示的子网,用户C可以访问1.0.2.0/24和1.0.2.0/ 26等等。树中的级别数是可变的,只受位掩码的最大长度限制,因此理论上你可以有:

1.0.0.0/8
 1.0.0.0/9
  1.0.0.0/10
   1.0.0.0/11
.....

一直到1.0.0.0/32,每个连续的“所有者”都能够访问它们下面的所有子网。

有关在MySQL中存储此内容的最佳方法的任何建议吗?以及确定特定用户是否应该使用PHP访问特定网络的最佳方法。

由于

1 个答案:

答案 0 :(得分:0)

如果将“所有者”IP地址存储为位掩码(4列?)并将CIDR存储在单独的列中,该怎么办?然后要找出谁拥有一个特定的地址,你将从ip部分构建一个掩码到CIDR的长度,然后进行'select(checked_ip& stored_ip)'。