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 383 게시물 읽기
No. 383
RFC225 번역 완료
작성자
송상준
작성일
2001-03-13 10:46
조회수
8,046

4.8. Delete Operation

- directory에서 entry 제거를 요청

DelRequest ::= [APPLICATION 10] LDAPDN

- Delete Request는 삭제할 entry의 DN을 포함하고 단지 leaf entry만을 삭제할 수 있다.

- 결과

DelResponse ::= [APPLICATION 11] LDAPResult

4.9. Modify DN Operation

- directory에서 entry의 이름의 가장 왼쪽 component를 변경하거나 entries의 directory에서 새로운 위치로 subtree를 이동

ModifyDNRequest ::= [APPLICATIOn 12] SEQUENCE {

entry LDAPDN,

newrdn RelativeLDAPDN,

deleteoldrdn BOOLEAN,

newSuperior [0] LDAPDN OPTIONAL }

- entry : 변경할 entry의 DN으로 subordinate entries를 가질 수도 아닐 수도 있다.

- newrdn : entry의 새로운 이름의 가장 왼쪽 component를 이루는 RDN

- deleteoldrdn : old RDN attribute values를 entry의 속성으로써 유지할 지 여부

- newSuperior : 값이 있다면 존재하는 entry의 바로 상위가 되는 entry의 DN

- 결과

ModifyDNResponse ::= [APPLICATION 13] LDAPResult

- deleteoldrdn이 TRUE이면 old RDN은 entry로부터 삭제. FALSE이면 이 값은 entry의 non-distinguished attribute values로 유지된다.

- X.500에서는 ModifyDN을 단일 서버 안에 포함되는 entries에만 영향을 주도록 제한. LDAP 서버가 DAP과 mapping을 하려면 이 제한을 받아드려야 하고 error가 발생하면 affectsMultipleDSAs의 resultCode가 보내질 것이다.

4.10. Compare Operation

- directory안에서 entry가 제공하는 assertion을 비교

CompareRequest ::= [APPLICATION 14] SEQUENCE {

entry LDAPDN.

ava AttributeValueAssertion }

- entry : 비교할 entry의 이름

- ava : 비교할 entry의 속성을 가진 assertion

- CompareResponse ::= {APPLICATION 15} LDAPResult

- 일부 directory systems은 어떤 속성의 values에 대해 허가하는 access control을 형성하여 읽을 수 없게 한다.(예: userPassword) 검색결과에서 이런 type의 attribute가 리턴될 수 있으나 empty set of values

4.11. Abandon Operation

- 서버가 진행중인 operation을 중단하도록 요청

AbandonRequest ::= [APPLICATION 16] MessageID

- MessageID : 연결 상에서 이전에 요청했던 operation의 message id

- Abandon Operation의 응답은 없다. 서버가 search operation에 대해 응답을 전달하는 도중 abandon 요청을 받을 경우 응답의 전달을 중지하고 SearchResultDone을 보내지 않는다, 물론 서버는 적절히 encode된 LDAPMessage PDUs만이 잔달된다는 것을 보장해야 한다.

- client는 동일한 operation에 대해 여러 번 abandon 요청을 보내서는 안되고 중단되는 operation의 결과를 받을 준비를 해야 한다.

- 인식할 수 없는 MessageID를 받으면 abandon operation을 무시한다.

4.12. Extended Operation

- extended mechanism은 LDAP v3에서 이 protocol외에 다른 곳에서 available하지 않은 서비스(예를 들면 digitally signed operations과 results)들을 정의하는 additional operations를 가능하게 하기위해 추가

- extended operation은 clients가 미리 정의된 syntaxes와 semantics를 가지고 요청을 하고 응답을 받도록 한다.각 요청은 거기에 할당된 유일한 OBJECT IDENTIFIER를 가져야 한다.

ExtendedRequest ::= [APPLICATION 23] SEQUENCE {

requestName [0] LDAPOID,

requestValue [1] OCTECT STRING OPTIONAL }

requestName은 이 request에 상응하는 OBJECT IDENTIFIER의 dotted-decimal 표현이다. requestValue는 request에 의해 정의된 형식 안의 정보로 OCTECT STRING으로 encapsulated 돼있다.

- 서버는 ExtendedResponse를 포함한 LDAPMessage를 응답

ExtendedResponse ::= [APPLICATION 24] SEQUENCE {

COMPONENTS OF LDAPResult,

responseName [10] LDAPOID OPTIONAL,

response [11] OCTECT STRING OPTIONAL }

- 서버가 request name을 인식하지 못하면 protocolError의 result code를 갖는, LDAPResult로부터의 response fields만을 보내야 한다.

5. Protocol Element Encodings and Transfer

- clients와 servers는 5.2.1.에서 언급할 TCP위에서 LDPA의 mapping을 구현해야 한다.

5.1. Mapping Onto BER-based Transport Services

- LDAP의 protocol elements는 ASN.1의 Basic Encoding Rules를 사용하여 상호교환을 위해 encoded. 그러나 BER의 어떤 elements의 사용에서 높은 overhead에 의해 추가적인 제약이 LDAP protocol elements의 BER-encodings에 둔다.

(1) length encoding의 명확하게 한정된 형식만이 사용될 것

(2) OCTECT STRING values는 초기 형식 안에서만 encoded

(3) BOOLEAN type의 value가 true이면 encoding은 16진수 “FF”에 맞는 octets의 내용을 가져야 한다.

(4) type의 value가 default value이면 비워둬야 한다. 일부 BOOLEAN과 INTEGER types만이 이 protocol 정의 안에서 defaults value를 갖는다.

- 이 제한은 attribute values와 같은 OCTECT STRING values안에서 encapsulated된 ASN.1 types에서는 적용되지 않는다.

5.2. Transfer Protocols

- 이 protocol은 connection-oriented에서의 동작을 위해 디자인되었다.

5.2.1. Transmission Control Protocol

- LDAPMessage PDUs는 TCP bytestream에 정확하게 mapping된다. TCP에서 동작하는 서버의 구현은 할당된 port(389)위에서 protocol listener를 제공한다. Servers는 다른 port번호를 사용할 수 있다. clients는 어떤 valid TCP port위에서 servers와의 연결을 지원해야 한다.

6. Implementation Guidelines

6.1. Server Implementations

- servers는 모든 필수적인 attribute type name을 인식할 수 있고 [5]에 정의된 syntaxes를 구현해야 한다. servers는 또한 추가적인 attribute type name을 인식할 수 있다.

6.2. Client Implementations

- referrals를 요청하는 clients는 servers사이를 loop하지 않는다는 것을 보증해야 한다. 동일한 target entry name과 scope, filter를 사용하여 동일한 요청을 위해 동일한 서버에 반복적으로 접근해서는 안 된다. 일부 clients는 매번 operation에서 일어나는 referral handling을 증가시키는 counter를 사용하고, 이러한 종류의 clients는 root와 leaf entry사이의 naming contexts의 최소 10 layer를 갖는 DIT를 다룰 수 있어야 한다.

- servers와의 우선하는 협의가 없으면 clients는 servers가 section 6.1에서 참조된 거 이상의 어떠한 특정 schemas를 지원한다고 가정한다. 다른 schemas는 동일한 이름을 가진 다른 attribute types을 가질 수 있다. Client는 server의 root DES나 server에 의해 보유 되는 entries안의 subschemaSubentry attribute에 의해 참조되는 subschema entries를 구할 수 있다.

7. Security Considerations

- connection-oriented transport에서 사용될 때, LDAP v3는 LDAP v2의 인증 mechanism, simple authentication, SASL mechanism을 위한 편의를 제공한다, SASL은 무결성과 비밀성의 services를 가능하게 한다. 또한 서버가 client에게 credentials를 보낼 수 있도록 허가한다.

- cleartext password의 사용은 진행되는 transport service가 보안성을 보장할 수 없고 권한이 없는 부분에 대해 password가 유출될 수 있다.

- SASL을 사용할 때, BindRequest의 name field는 수정에 대해 보호되지 않는다. 따라서 client의 DN이 credentials를 통해 협의된다면 이것은 보호되지 않는 name field안의 어떤 value보다 우선권을 갖는다.

- 서버가 특별이 인증된 client가 아니면 검색 결과로 entries나 attributes를 보내는 것을 막는 access control policies를 가질 수 있으므로 정보가 다중의 client에게 제공된다면, LDAP을 통해 얻은 attributes와 entries의 cache 구현에서는 access control을 유지한다는 것을 보증해야 한다.

 

Appendix A – Complete ASN.1 Definition

Lightweight-Directory-Access-Protocol-V3 DEFINITIONS

IMPLICIT TAGS ::=

 

BEGIN

 

LDAPMessage ::= SEQUENCE {

messageID MessageID,

protocolOp CHOICE {

bindRequest BindRequest,

bindResponse BindResponse,

unbindRequest UnbindRequest,

searchRequest SearchRequest,

searchResEntry SearchResultEntry,

searchResDone SearchResultDone,

searchResRef SearchResultReference,

modifyRequest ModifyRequest,

modifyResponse ModifyResponse,

addRequest AddRequest,

addResponse AddResponse,

delRequest DelRequest,

delResponse DelResponse,

modDNRequest ModifyDNRequest,

modDNResponse ModifyDNResponse,

compareRequest CompareRequest,

compareResponse CompareResponse,

abandonRequest AbandonRequest,

extendedReq ExtendedRequest,

extendedResp ExtendedResponse },

controls [0] Controls OPTIONAL }

 

MessageID ::= INTEGER (0 .. maxInt)

 

maxInt INTEGER ::= 2147483647 -- (2^^31 - 1) --

 

LDAPString ::= OCTET STRING

 

LDAPOID ::= OCTET STRING

 

LDAPDN ::= LDAPString

 

RelativeLDAPDN ::= LDAPString

 

AttributeType ::= LDAPString

 

AttributeDescription ::= LDAPString

 

AttributeDescriptionList ::= SEQUENCE OF

AttributeDescription

 

AttributeValue ::= OCTET STRING

 

AttributeValueAssertion ::= SEQUENCE {

attributeDesc AttributeDescription,

assertionValue AssertionValue }

 

AssertionValue ::= OCTET STRING

 

Attribute ::= SEQUENCE {

type AttributeDescription,

vals SET OF AttributeValue }

 

MatchingRuleId ::= LDAPString

 

LDAPResult ::= SEQUENCE {

resultCode ENUMERATED {

success (0),

operationsError (1),

protocolError (2),

timeLimitExceeded (3),

sizeLimitExceeded (4),

compareFalse (5),

compareTrue (6),

authMethodNotSupported (7),

strongAuthRequired (8),

-- 9 reserved --

referral (10), -- new

adminLimitExceeded (11), -- new

unavailableCriticalExtension (12), -- new

confidentialityRequired (13), -- new

saslBindInProgress (14), -- new

noSuchAttribute (16),

undefinedAttributeType (17),

inappropriateMatching (18),

constraintViolation (19),

attributeOrValueExists (20),

invalidAttributeSyntax (21),

-- 22-31 unused --

noSuchObject (32),

aliasProblem (33),

invalidDNSyntax (34),

-- 35 reserved for undefined isLeaf --

aliasDereferencingProblem (36),

-- 37-47 unused --

inappropriateAuthentication (48),

invalidCredentials (49),

insufficientAccessRights (50),

busy (51),

unavailable (52),

unwillingToPerform (53),

loopDetect (54),

-- 55-63 unused --

namingViolation (64),

objectClassViolation (65),

notAllowedOnNonLeaf (66),

notAllowedOnRDN (67),

entryAlreadyExists (68),

objectClassModsProhibited (69),

-- 70 reserved for CLDAP --

affectsMultipleDSAs (71), -- new

-- 72-79 unused --

other (80) },

-- 81-90 reserved for APIs --

matchedDN LDAPDN,

errorMessage LDAPString,

referral [3] Referral OPTIONAL }

 

Referral ::= SEQUENCE OF LDAPURL

 

LDAPURL ::= LDAPString -- limited to characters permitted in URLs

 

Controls ::= SEQUENCE OF Control

 

Control ::= SEQUENCE {

controlType LDAPOID,

criticality BOOLEAN DEFAULT FALSE,

controlValue OCTET STRING OPTIONAL }

 

BindRequest ::= [APPLICATION 0] SEQUENCE {

version INTEGER (1 .. 127),

name LDAPDN,

authentication AuthenticationChoice }

 

AuthenticationChoice ::= CHOICE {

simple [0] OCTET STRING,

-- 1 and 2 reserved

sasl [3] SaslCredentials }

 

SaslCredentials ::= SEQUENCE {

mechanism LDAPString,

credentials OCTET STRING OPTIONAL }

 

BindResponse ::= [APPLICATION 1] SEQUENCE {

COMPONENTS OF LDAPResult,

serverSaslCreds [7] OCTET STRING OPTIONAL }

 

UnbindRequest ::= [APPLICATION 2] NULL

 

SearchRequest ::= [APPLICATION 3] SEQUENCE {

baseObject LDAPDN,

scope ENUMERATED {

baseObject (0),

singleLevel (1),

wholeSubtree (2) },

derefAliases ENUMERATED {

neverDerefAliases (0),

derefInSearching (1),

derefFindingBaseObj (2),

derefAlways (3) },

sizeLimit INTEGER (0 .. maxInt),

timeLimit INTEGER (0 .. maxInt),

typesOnly BOOLEAN,

filter Filter,

attributes AttributeDescriptionList }

 

Filter ::= CHOICE {

and [0] SET OF Filter,

or [1] SET OF Filter,

not [2] Filter,

equalityMatch [3] AttributeValueAssertion,

substrings [4] SubstringFilter,

greaterOrEqual [5] AttributeValueAssertion,

lessOrEqual [6] AttributeValueAssertion,

present [7] AttributeDescription,

approxMatch [8] AttributeValueAssertion,

extensibleMatch [9] MatchingRuleAssertion }

 

SubstringFilter ::= SEQUENCE {

type AttributeDescription,

-- at least one must be present

substrings SEQUENCE OF CHOICE {

initial [0] LDAPString,

any [1] LDAPString,

final [2] LDAPString } }

 

MatchingRuleAssertion ::= SEQUENCE {

matchingRule [1] MatchingRuleId OPTIONAL,

type [2] AttributeDescription OPTIONAL,

matchValue [3] AssertionValue,

dnAttributes [4] BOOLEAN DEFAULT FALSE }

 

SearchResultEntry ::= [APPLICATION 4] SEQUENCE {

objectName LDAPDN,

attributes PartialAttributeList }

 

PartialAttributeList ::= SEQUENCE OF SEQUENCE {

type AttributeDescription,

vals SET OF AttributeValue }

 

SearchResultReference ::= [APPLICATION 19] SEQUENCE OF LDAPURL

 

SearchResultDone ::= [APPLICATION 5] LDAPResult

 

ModifyRequest ::= [APPLICATION 6] SEQUENCE {

object LDAPDN,

modification SEQUENCE OF SEQUENCE {

operation ENUMERATED {

add (0),

delete (1),

replace (2) },

modification AttributeTypeAndValues } }

 

AttributeTypeAndValues ::= SEQUENCE {

type AttributeDescription,

vals SET OF AttributeValue }

 

ModifyResponse ::= [APPLICATION 7] LDAPResult

 

AddRequest ::= [APPLICATION 8] SEQUENCE {

entry LDAPDN,

attributes AttributeList }

 

AttributeList ::= SEQUENCE OF SEQUENCE {

type AttributeDescription,

vals SET OF AttributeValue }

 

AddResponse ::= [APPLICATION 9] LDAPResult

 

DelRequest ::= [APPLICATION 10] LDAPDN

 

DelResponse ::= [APPLICATION 11] LDAPResult

 

ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {

entry LDAPDN,

newrdn RelativeLDAPDN,

deleteoldrdn BOOLEAN,

newSuperior [0] LDAPDN OPTIONAL }

 

ModifyDNResponse ::= [APPLICATION 13] LDAPResult

 

CompareRequest ::= [APPLICATION 14] SEQUENCE {

entry LDAPDN,

ava AttributeValueAssertion }

 

CompareResponse ::= [APPLICATION 15] LDAPResult

 

AbandonRequest ::= [APPLICATION 16] MessageID

 

ExtendedRequest ::= [APPLICATION 23] SEQUENCE {

requestName [0] LDAPOID,

requestValue [1] OCTET STRING OPTIONAL }

 

ExtendedResponse ::= [APPLICATION 24] SEQUENCE {

COMPONENTS OF LDAPResult,

responseName [10] LDAPOID OPTIONAL,

response [11] OCTET STRING OPTIONAL }

 

END

[Top]
No.
제목
작성자
작성일
조회
390ldap에서 host주소 어디서 바꿔주나요?
송지훈
2001-03-19
7603
393┕>Re: ldap에서 host주소 어디서 바꿔주나요?
박근오
2001-03-19 20:16:08
8359
386[질문] LDAP 에 대해서 질문있습니다
초보자
2001-03-17
7386
387┕>Re: [질문] LDAP 에 대해서 질문있습니다
박근오
2001-03-18 23:56:03
8487
388 ┕>Re: Re: [질문] LDAP 에 대해서 질문있습니다
초보자
2001-03-19 02:02:23
8294
389  ┕>Re: Re: Re: [질문] LDAP 에 대해서 질문있습니다
박근오
2001-03-19 10:07:23
8599
384objectclass를 정의하려면 어떻게 해야 합니까?
송지훈
2001-03-13
6974
385┕>Re: objectclass를 정의하려면 어떻게 해야 합니까?
박근오
2001-03-13 15:34:32
8114
383RFC225 번역 완료
송상준
2001-03-13
8046
382RFC225 번역 완료
송상준
2001-03-13
8306
378[질문]acl(access control list)관련
정규일
2001-03-12
6752
379┕>Re: [질문]acl(access control list)관련
박근오
2001-03-12 14:36:12
7540
381 ┕>^^ 무지무지 감사합니다.
정규일
2001-03-13 09:51:03
7295
376[질문]slapd.conf에서 concurrency, updateref
정규일
2001-03-09
6211
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.055초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다