2

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

1.0.0.0/16 - 归用户“A”所有
 1.0.1.0/24 - 由用户“B”拥有
 1.0.2.0/24 - 由用户“C”拥有
  1.0.2.0/26 - 由用户“D”拥有
 1.0.3.0/24 - 归用户“E”所有

ETC

现在棘手的一点来了,因为每个用户都应该能够查看/编辑他们下的所有子网,所以上面的用户“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。

谢谢

4

1 回答 1

0

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

于 2013-03-11T22:11:04.520 回答