日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ldap的shema

發布時間:2024/4/14 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ldap的shema 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、項目中,更新人員信息時會報異常

下面為提示:LDAP: error code 17 - virtualaccount: attribute type undefined

分析:1) 人員信息是存儲在ldap中,應該是ldap中的人員沒有這個屬性

2)在ldap\etc\schema下找到人員信息的定義

# 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))



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屬性,如下

# ifactivated attributetype ( 2.16.840.1.153730.3.2.14NAME virtualaccount DESC 'is or not virtualaccount'EQUALITY caseIgnoreMatchSUBSTR caseIgnoreSubstringsMatchSYNTAX 1.3.6.1.4.1.1466.115.121.1.15 )

?給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屬性改為下面的代碼

#virtualaccount attributetype ( 2.16.840.1.153730.3.2.20NAME 'virtualaccount'DESC 'whether is virtual account or not'EQUALITY caseIgnoreMatchSUBSTR caseIgnoreSubstringsMatchSYNTAX 1.3.6.1.4.1.1466.115.121.1.15 SINGLE-VALUE)

?

ldap 啟動正常,問題解決

?

目前想不通的地方,為什么我的定義是錯誤的??錯在什么地方?ID??屬性的ID只要不唯一就可以么??

?

?

總結

以上是生活随笔為你收集整理的ldap的shema的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。