ldap的shema
一、項目中,更新人員信息時會報異常
下面為提示:LDAP: error code 17 - virtualaccount: attribute type undefined
分析:1) 人員信息是存儲在ldap中,應該是ldap中的人員沒有這個屬性
2)在ldap\etc\schema下找到人員信息的定義
MAY,即可選屬性定義中確實沒有virtualaccount屬性
3)得出解決方式:增一個virtualaccount屬性定義,在GalaxyPeople中添加。
二、基礎知識
1、什么是LDAP的Schema?
在ldap中, shema用來定義你的ldap中可以有那些objectClass,這些objectClass又可以有那些Attribute,以及控制什么樣的數據被存到哪里。
用數據庫的概念來理解:任何的數據庫都有一個Schema,Schema是一個數據模型,它被用來決定數據怎樣被存儲,被跟蹤的數據的是什么類型,存儲在不同的Entry下的數據之間的關系。Attribute相當于字段(Field),而Object Calss相當于表。
當你搭建好你的LDAP后,一些已經定義好的Entry的信息存儲在一系列的Attribute中的值中。你也可以創建一個要存儲在LDAP中的新的值類型。
所有的Attribute可能被放到一起用來組成一個叫做Object Class的類型。為了滿足你的需要,你可以定義自己的Object Class,每一個Object Class中的屬性都可以設計成reqired(必選的)或optional(可選的)。
你可以設計你的LDAP信息樹(DIT),在同一個Entry存儲許多相似的Object Class。
2、理解LDAP的Attribute
簡單的說,Attribute是可以存放一個單一類型信息的容器。(采用Key/Value進行對應)。
定制Schema可以使你設計很多你需要的Attribute,如你喜歡的食物、生日、工作日期等等,但你也不得不為你的目錄服務器的配置文件(Schema)添加正確的Attribute。
一個Attribute包括以下幾個部分,我們稍后會詳細介紹。
n Attribute名字
n 描述
n Attribute的對象標識符(OID)
n 用于進行類型檢查和模式匹配的語法
n Attribute是否允許有多個值
(1)什么是Attribute的名字?
這在概念上已經很清晰了,但在你自己創建一個新屬性類型之前,你應該檢查一下LDAP規范中是否已經存在能夠滿足你的要求的Attribute。你可以從下面這個站點查找已經定義好的object class的Attribute列表:http://www.ldapman.org/schema-references。
假設你需要的Attribute不存在,那么你要自己添加。首先你應該為自己將要添加的屬性定義一個新的名字,需要注意的是你的Attribute的名字要避免與很可能成為“官方指定”的Attribute的名字沖突。
你可以用你的單位、公司甚至停車場的ID來作為你的Attribute的名字。當定義Schema時,Gizmo公司的LDAP的系統管理員很可能定義這樣的名字作為Attribute名:"gizmoParkingPassNumber”。我們可以看到這個Attribute名字可以很好避免同日后的官方指定的Attribute名字沖突。
請注意“gizmoParkingPassNumber”作為Attribute看起來很優美,你應該養成這樣的習慣:Attribute的名字的第一個字母必須小寫,其他單詞的第一個字母必須大寫,其他的字母必須小寫,并且你的Attribute名字應該足夠長,這樣可以根據你的Attribute的名字就可以知道它所存儲的數據的意義。
Attribute的名字由a-z,0-9以及其他少量的字母構成,名字的第一個字符必須是字母,空格、下劃線及一些特殊字符是不允許出現在Attribute的名字中的。
(2)描述: 是一個描述Attribute的用途的注釋。
(3)對象標識符(Object Identifiers)
對象標識符(OID)是被LDAP內部數據庫引用的數字。Attribute的名字是讓你和我看的,但計算機不喜歡,因為計算機處理數字是最有效率的。如果你對DNS的概念很熟悉的話,那么你應該很容易理解這點。比如:www.sendmail.net 這個域名被計算機接收后會翻譯成一個IP地址。
(4)語法(syntax):創建Attribute時要遵從的一些規則,例如只能為數字,只能是電話號碼等。語法也可以自己定義。
三、了解了基本知識點就可修改。
新建一個virtualaccount屬性,如下
?給people屬性添加此屬性
# GalaxyPeople objectclass ( 2.16.840.1.153730.3.2.22NAME 'GalaxyPeople'DESC 'GalaxyPeople use to manage people'SUP InetOrgPersonSTRUCTURALMAY (otherDepartmentNumber $ sortid $ ifactivated $ peopleLevel $ leadermember $ leaderFilter $ title $ post $ globalsortid $ virtualaccount))?
結果:添加完之后,ldap啟動不了,不知道為什么??
后來,找到一個別的版本的ldap,將新建virtualaccount屬性改為下面的代碼
?
ldap 啟動正常,問題解決
?
目前想不通的地方,為什么我的定義是錯誤的??錯在什么地方?ID??屬性的ID只要不唯一就可以么??
?
?
總結
以上是生活随笔為你收集整理的ldap的shema的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle10数据库导入导出问题
- 下一篇: JDOM/XPATH编程指南