我正在用C编程语言编写身份和访问管理应用程序。因此我使用openLDAP来保存用户详细信息,它提供了一组API来执行绑定,添加,搜索,修改等操作。我创建了一个新的对象类来保存我的应用程序的用户详细信息,如下所示,
attributetype ( 2.5.4.1 NAME 'id'
DESC 'RFC2256: user identifier'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
attributetype ( 2.5.4.2 NAME 'name'
DESC 'RFC2256: user name'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
attributetype ( 2.5.4.3 NAME 'email'
DESC 'RFC2256: user mail address'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
objectclass ( 2.5.4.4 NAME 'user'
DESC 'user details'
SUP top STRUCTURAL
MUST id
MAY ( name $ email ) )
是否可以在不直接编辑模式文件的情况下向'user'对象类添加新属性'phoneNumber',但是使用openLDAP库提供的API?
答案 0 :(得分:1)
最佳做法是添加一个没有REQUIRED属性的辅助ObjectClass,并根据需要添加“MAY”属性。
将AUX类添加到Schema后,您可以根据需要将AUX类添加到任何Structural ObjectClass条目作为ObjectClass值进行修改操作。
这使您可以保持基本模式的完整。
-Jim
答案 1 :(得分:0)
不是您所要求的。但这很重要,因此其他人不要天真地复制并粘贴以下内容:
属性类型(2.5.4。*
[..]
objectclass(2.5.4.4 NAME'user'
您正在滥用已分配给其他模式描述的OID。这已破了。您将无法加载任何数据。
如果您遵循RFC 4512中定义属性类型和对象类的规则,则可以使用OpenLDAP的动态配置动态添加/修改架构。
另请参阅:cn=schema
请注意,如果已经存在使用它的数据,则删除模式描述是不可以的。
答案 2 :(得分:0)
为Schema编写LDAP标准,使其成为“一次写入多次读取”数据-一旦设置了内容,就无法取消设置。结果,许多LDAP服务器都很难像您所说的那样更改其架构元素。
当然,对于我们许多人来说,这种态度是我们无法负担的学术上的奢侈,因此我们要做对其架构进行更改,尽管它使LDAP供应商感到震惊。>
但是,我们更改了我们的架构,而不是标准架构。更改标准对象类是不行的,因为在更新LDAP服务器软件时,有时对默认标准所做的任何更改都会消失而不会发出警告。即使将自己限制为编辑自己要编辑的对象类,您仍可能必须直接更新模式文件,然后让ldap服务器加载新文件,而不是仅仅要求它很好地更新其模式元素。>
当然,不同的LDAP服务器对此有不同的要求。例如,当我们使用iPlanet LDAP时,如果我没记错的话,它将使我们对未使用的对象类进行删除和添加,并像这样进行更改。 (不要使用iPlanet LDAP;它是15年前分崩离析的合资企业的产品。)