database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
ㆍLDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
LDAP Q&A 238 게시물 읽기
No. 238
Re: 메타 인포메이션 (2)
작성자
박근오
작성일
2001-01-08 13:02
조회수
8,272

이런 정보를 저장하기위해, 우리는 우리의 스키마에 3개의 테이블을 더 추가한다. 그리고 거기에 데이타로 채운다.

(예제를 보길...):

 

ldap_oc_mappings (some columns are not listed for clarity)

---------------

id=1

name="person"

keytbl="persons"

keycol="id"

 

이 테이블은 objectclass(objectclass의 이름은 name컬럼에 있다.)와 일치하는 entity에 대한 프라이머리 키를 가지는

테이블간의 매핑을 정의하고 있다. 예로, 우리의 예제에서 , person entity는 (우리가 "person" objectclass로 표현하려는)

두개의 테이블에 나뉘어 존재한다.(persons,phones) 그리고 이것은 persons.id컬럼에 의해 구분된다.(이 entity에 대한

프라이머리 키라 부른다.) keytbl 그리고 keycol은 "persons"(table name)와 "id"(column name)를 포함한다.

 

ldap_attr_mappings (some columns are not listed for clarity)

-----------

id=1

oc_id=1

name="cn"

sel_expr="CONCAT(persons.first_name,' ',persons.last_name)"

from_tbls="persons"

join_where=NULL

************

id=<n>

oc_map_id=1

name="telephoneNumber"

sel_expr="phones.phone"

from_tbls="persons,phones"

join_where="phones.pers_id=persons.id"

 

이 테이블은 value를 받아오기 위한 SQL query와 LDAP attribute간의 매핑을 정의하고 있다. LDAP스키마와 다르게

이것들은 *attribute type*이 아니다는것을 주의하기 바란다. - objectclass "person" 에 대한 attribute "cn"은

다른 objectclass의 "cn"에 대해서 다른 테이블에서 그 값을 가질수가 있다. 그래서 attribute매핑은 objectclass의

매핑에 의존한다.(objectclass들에 모두같은 타입의 "cn"을 가지는 ldap스키마에서의 attribute 타입과 다르다.)

그러므로, 우리는 oc_mappings 테이블에 링크를 가지는 oc_map_id 컬럼을 가지는 것이다.

이제 우리는 주어진 attribute를 로딩하기 위한 SQL쿼리를 잘라서 3등분으로 나누기로 한다.

첫번째, sel_expr컬럼 - 이것은 SELECT와 FROM키워드사이에 들어가는 표현식으로 무엇을 값을로 받아올것인지를

정의하는 것이다.

두번째, from_tbls는 table list - FROM과 WHERE키워드 사이에 들어가는 텍스트이다. 편의를 위해서 알리아스를 포함

하기도한다.(예제를 보길..)

그리고 마지막, WHERE 문 부분. join_where - 값을 가지는 테이블과 프라이머리 키를 가지는 테이블을 조인시키기 위한

조건을 표현하고 있다. 만일 value와 프라이머리 키가 같은 테이블에 있다면 (당연한말이지만 ^^) 이 컬럼은 NULL로

비운다.

 

부분적으로 이 정보를 가지므로써, 우리는 엔트리의 id로 attribute값을 읽어 올수 있는 SQL 쿼리를 만들수 있게

될뿐 아니라, 주어진 search filter에 일치하는 object의 id를 로딩하는 쿼리까지 생성할수 있다.

아래 예제를 보라.

 

ldap_entries

------------

id=1

dn=<dn you choose>

oc_map_id=...

parent=<parent record id>

keyval=<value of primary key>

 

이 테이블은 여러분 LDAP트리의 엔트리의 DN과 일치하는 관계형 데이타를 위한 프라이머리키 값 사이의 매핑을 정의

하고 있다. 이것은 재귀적 구조(recursive structure)를 가진다.(parent컬럼은 동일 테이블의 id컬럼을 참조한다.)

이렇게 여러분은 여러분의 flat relational data를 어떠한 트리구조에도 접목시킬수있다. (하지만 과연 이렇게 까지

하게되면 속도가 어떨른지... 여기까지 읽고 대충 메타정보의 전말을 알게되니 참~~~... 아무래도 프로그래머의 짐이

상당히 무겁군요. -_-;) objectclass id의 매핑을 가지므로써, 우리는 프라이머리 키에 대한 컬럼과 테이블을 결정할수

가 있다. 그리고 keyval은 그 값을 저장한다. 그러므로 주어진 DN에 해당하는 LDAP엔트리에 해당하는 정확히 일치하는

튜플을 얻을수가 있다.

 

주의할점은 이러한 디자인이 하나의 중요한 제한을 가지고 있다는 것인데 이것은 key는 integer여야만 한다는 것이다.

그러나 , 잘 디자인된 스키마에 대해 내가 아는 모든 것은 그것이 큰 제한을 아니라고 생각하게끔 해준다. (직역. ^^;)

만약 key에 대해서 서로다른 타입으로 지원을 해야 할 필요가 있다면 , 패치를 해서 OpenLDAP ITS에 제시하면

내가 포함시켜줄것이다.

 

또한 어떤 사람들은 그들이 매우 구조화된 트리가 필요치 않다고 그리고 관계형 스키마에 입력,삭제를 할때 매번 하나

이상의 테이블을 업데이트 하는 것을 원치 않는다고 불평을 했다. 그런 사람들은 리얼 테이블 대신에 view(뷰)를

사용하여 다음과 같이 해보길 ....:

 

Robin Elfrink wrote: (음... -_-; 적어도 mysql에서는 안되는거같은데... )

 

> About using a view for ldap_entries...

>

> This is what I came up with this morning:

>

> CREATE VIEW ldap_entries (id, dn, oc_map_id, parent, keyval) AS

> SELECT (1000000000+userid),

> UPPER(CONCAT(CONCAT('cn=',gecos),',o=MyCompany,c=NL'))

> , 1, 0, userid FROM unixusers UNION

> SELECT (2000000000+groupnummer),

> UPPER(CONCAT(CONCAT('cn=',groupnaam),',o=MyCompany,c=NL')), 2, 0,

> groupnummer FROM groups;

>

[Top]
No.
제목
작성자
작성일
조회
246ldap version 2 와 version 3의 차이는?
강윤환
2001-01-10
7953
252┕>Re: ldap version 2 와 version 3의 차이는?
정재익
2001-01-11 20:35:15
8216
258 ┕>Re: Re: ldap version 2 와 version 3의 차이는?
김경하
2001-01-15 14:36:26
8497
244LDAP 서버 개발자 구함
김형근
2001-01-09
7683
243LDAP에서 입력한 데이타를 몽땅 삭제하는 방법?
윤지영
2001-01-09
7600
245┕>Re: LDAP에서 입력한 데이타를 몽땅 삭제하는 방법?
박근오
2001-01-09 14:54:53
7890
236RDBMS를 Back-SQL로 쓰는 목적.
박근오
2001-01-08
7920
237┕>Re: 메타 인포메이션 (1)
박근오
2001-01-08 13:05:51
8681
238┕>Re: 메타 인포메이션 (2)
박근오
2001-01-08 13:02:39
8272
239┕>잘읽었습니다. 현재 NOVELL
송상준
2001-01-08 13:42:33
7618
234이게 빠른건지 느린건지 ...?
임오근
2001-01-08
9031
242┕>Re: 이게 빠른건지 느린건지 ...?해결^^
임오근
2001-01-08 19:30:43
8942
227LDAP의 데이터 백업 및 복구 방법
백종규
2001-01-06
10069
228┕>Re: LDAP의 데이터 백업 및 복구 방법
박근오
2001-01-06 11:13:48
9570
232┕>Re: LDAP의 데이터 백업 및 복구 방법
임오근
2001-01-06 14:18:22
9086
225오늘 LDAPp 1000000명 사용자를 만드는데
송상준
2001-01-05
8990
231┕>Re: 오늘 LDAPp 1000000명 사용자를 만드는데
박근오
2001-01-06 13:17:05
9308
235 ┕>감사합니다. 저는 허접입니다. 시작 단계이고요...
송상준
2001-01-08 10:09:03
9025
240  ┕>서칭 한번 해보세요!!
황명호
2001-01-08 14:24:08
8941
241 ┕>Re: Re: 오늘 LDAPp 1000000명 사용자를 만드는데--&gt; 파일 어디 있어요..
서강춘
2001-01-08 16:15:39
9442
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.082초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다