如何在Active Directory中存储组织层次结构并将其用作应用程序?

时间:2016-08-26 22:22:14

标签: architecture active-directory

举个例子,让我们说:

  1. 我有一个组织电话“美国”。我的用户是“居民”,根据他们的主要地址,每个用户通常都有一个城市,县和州,这些都是等级的。但是某些用户可能会有更多或更少的级别,具体取决于他们的位置:例如他们可能没有城市(只是一个县和州),或者如果住在一个大城市,除了城市,县和州之外还有一个社区。我事先并不知道层次结构有多深(例如,社区可能有进一步的细分)。对于层次结构中的每个级别(邻域,城市,县和州),我有零个或多个用户,他们是该城市,县或州的“经理”。

  2. 用户访问应用程序,用于创建工件。应用程序将工件存储在单独的数据库中,比如SQL Server。用户可以在创建特定工件时访问该工件,或者如果他们是创建工件的用户的邻居,城市,县,州等的“经理”之一。

  3. (为简单起见,我假设用户从不“移动”,即给定用户的城市,县和州在整个系统生命周期内都不会改变。)

    我的问题是:

    1. 如果在Active Directory中定义了用户,您是否还将组织结构存储在Active Directory中?那么用户是否是哪个级别的经理呢?如果你将它存储在Active Directory中,你会怎么做?

    2. 您将在工件中保存哪些信息,以便快速获取用户有权访问的所有工件的列表,而无需为数据库中的每个工件查询Active Directory?

    3. 对于第2点,我设想的可能性是在SQL Server中存储与每个工件一起存储创建它的用户的级别(城市,县,州......)。这样,搜索可以通过查询Active Directory来确定用户是($levels_user_is_manager_of)管理员的级别,并且在SQL查询中选择用户可以访问哪些工件来执行类似{{1}的操作}。沿着这些方向的事情是否有意义?

1 个答案:

答案 0 :(得分:1)

在AD中存储应用程序特定数据之前,需要考虑优缺点。 Pro:控制企业级应用程序,大多数AD用户使用该应用程序;由专门且通常有限的团队(通常由IT /服务台完成对AD的更改)的所有权,这更加安全和可追溯。反对:AD应保留无法控制的数据(如果使用或不使用数据,则不透明);对AD的更改可能需要一些时间才能传播。

考虑到上述情况,请考虑

1)使用角色/成员资格(即创建角色“GeoUser US,IL,Chicago”,“GeoUser US,IL”,“GeoManager US,IL”等)。这将帮助您为任何用户分配任意数量的权限,无论他的主要地址如何。使用嵌套的AD组(即“GeoUser US,IL”将是“GeoUser US,IL,Chicago”等的父级)。

2)保持登录名和日期/时间只是为了知道谁/何时创建它以及完整位置(即如果作者是“GeoUser US,IL,Chicago”的角色,那么存储“US,IL,Chicago”) 。这将帮助您保持位置,以防作者更改其地址或将离开公司(并且他的帐户将被删除)。使用通配符搜索基于他们的“Geo”-roles授权用户(例如,如果用户在“GeoManager US,IL”中,那么WHERE子句将是WHERE level LIKE'US,IL,%“,它应该从IL找到所有工件,包括儿童地点。