Expand PMF_FN_* macros.
[netbsd-mini2440.git] / external / bsd / openldap / dist / doc / drafts / draft-ietf-ldapext-acl-model-xx.txt
blob7e159eb220dd77a176590df04b62e3d0ed9f9dcd
8 Internet-Draft                                     E. Stokes
9 LDAP Extensions WG                                B. Blakley
10 Intended Category: Standards Track            Tivoli Systems
11 Expires: 14 January 2001                        D. Rinkevich
12                                                          IBM
13                                                     R. Byrne
14                                             Sun Microsystems
15                                                 14 July 2000
17               Access Control Model for LDAPv3
18            <draft-ietf-ldapext-acl-model-06.txt>
20 STATUS OF THIS MEMO
22 This document is an Internet-Draft and is in full
23 conformance with all provisions of Section 10 of RFC2026.
25 Internet-Drafts are working documents of the Internet
26 Engineering Task Force (IETF), its areas, and its working
27 groups. Note that other groups may also distribute working
28 documents as Internet-Drafts. Internet-Drafts are draft
29 documents valid for a maximum of six months and may be
30 updated, replaced, or obsoleted by other documents at any
31 time. It is inappropriate to use Internet-Drafts as
32 reference material or to cite them other than as "work in
33 progress."
35 The list of current Internet-Drafts can be accessed at
36 http://www.ietf.org/ietf/1id-abstracts.txt
38 The list of Internet-Draft Shadow Directories can be
39 accessed at http://www.ietf.org/shadow.html.
41 Comments and suggestions on this document are encouraged.
42 Comments on this document should be sent to the  LDAPEXT
43 working group discussion list:
45           ietf-ldapext@netscape.com
47 COPYRIGHT NOTICE
49 Copyright (C) The Internet Society (2000).  All Rights
50 Reserved.
52 ABSTRACT
54 This document describes the access control model for the
55 Lightweight Directory Application Protocol V3 (LDAPv3)
56 directory service. It includes a description of the model,
57 the LDAP controls, and the extended operations to the LDAP
58 protocol.  The current LDAP APIs are sufficient for most
62 Stokes, et al      Expires 14 January 2001          [Page 1]
68 Internet-Draft      Access Control Model        14 July 2000
72 access control operations.  An API (in a separate document)
73 is needed for the extended operation getEffectiveAccess.  A
74 separate requirements document for access control exists
75 [REQTS].  The access control model used the requirements
76 documents as a guideline for the development of this
77 specification and are reflected in this specification to the
78 extent that the working group could agree on an access
79 control model.
82 The key words "MUST", "MUST NOT", "REQUIRED", "SHALL",
83 "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED",  and
84 "MAY" used in this document are to be interpreted as
85 described in [Bradner97].
89 1.  Introduction
91 The ability to securely access (replicate and distribute)
92 directory information throughout the network is necessary
93 for successful deployment.  LDAP's acceptance as an access
94 protocol for directory information is driving the need to
95 provide an access control model definition for LDAP
96 directory content among servers within an enterprise and the
97 Internet.  Currently LDAP does not define an access control
98 model, but one is needed to ensure consistent secure access,
99 replication, and management across heterogeneous LDAP
100 implementations. The major objective is to provide a simple,
101 usable, and implementable, but secure and efficient access
102 control model for LDAP while also providing the appropriate
103 flexibility to meet the needs of both the Internet and
104 enterprise environments and policies.  This document defines
105 the model and the protocol extensions (controls and extended
106 operations).
108 This draft does not (and cannot) fully specify the behavior
109 of the Access Control Model in a distributed environment
110 (e.g. propagating access control information across servers
111 and ACI administration) because there is no LDAP standard
112 defining how to distribute directory data between LDAP
113 servers.  The behavior of the Access Control Model in
114 distributed environments is beyond the scope of this draft.
118 2.  The LDAPv3 Access Control Model
120 Access Control mechanisms evaluate requests for access to
121 protected resources and make decisions about whether those
122 requests should be granted or denied.  In order to make a
126 Stokes, et al      Expires 14 January 2001          [Page 2]
132 Internet-Draft      Access Control Model        14 July 2000
136 grant/deny decision about a request for access to a
137 protected resource, an access control mechanism needs to
138 evaluate policy data.  This policy data describes security-
139 relevant characteristics of the requesting subject and the
140 rules which govern the use of the target object.
142 No mechanism is defined in this document for storage of
143 access control information at the server beyond indicating
144 that the attribute holding access control information is an
145 operational attribute.
147 The access control mechanisms specified in this document are
148 neutral with respect to policy inheritance mechanisms,
149 explicit vs. implicit denial, and group nesting.
151 The access control model defines
153    - What flows on the wire for interoperability
155      The existing LDAP protocol flows for ldap operations
156      are used to manipulate access control information.  A
157      set of permissions and their semantics with respect to
158      ldap operations is defined.  The permissions parallel
159      the types of ldap operations defined.  What is
160      transmitted is exactly what is read back.  Encoding of
161      access control information on the wire is per the
162      LDAPv3 specifications.
164      There is an additional LDAP control and extended
165      protocol operation defined, getEffectiveRights.  LDAP
166      clients use the control and extended operation to
167      manage and administer access control policy enforced by
168      LDAP servers.
170      Servers may store access control information in any way
171      they choose. In particular, servers may use the access
172      control mechanisms of their datastores to store and
173      enforce LDAP access control, or they may implement
174      access control managers external to their datastores.
175      Datastores and external access control managers MAY
176      implement any access control rule syntax and semantics
177      they choose, but the semantics MUST be compatible with
178      those defined in the section titled "Operational
179      Semantics of Access Control Operations".
181    - Attributes and classes for application portability of
182      access control information
184      An access control information attribute (ldapACI) for
185      application portability:  This attribute is used as
186      input to the LDAP APIs so access control information
190 Stokes, et al      Expires 14 January 2001          [Page 3]
196 Internet-Draft      Access Control Model        14 July 2000
200      can be addressed uniformly independent of how that
201      information is addressed and stored at the server.
202      This same attribute appears in LDIF output for
203      interchange of access control information.
205      An access control information subentry class
206      (ldapACISubEntry) and a set of attributes
207      (supportedAccessControlSchemes which is used in the
208      rootDSE and accessControlSchemes which is used in the
209      subentry ldapACISubEntry) to identity the access
210      control mechanisms supported by a server and in a given
211      part of the namespace, respectively.
213    - An attribute in the rootDSE, discloseOnError, to
214      control whether it is permissible for the server to
215      return the name of an entry or attribute in an error
216      (or empty set) operation result.  This closes a hole on
217      the ability to discover information you are not
218      authorized to discover.
220    - A mechanism to control access to access control
221      information:  The access control information attribute,
222      ldapACI, is used to control access to access control
223      information (controls access to itself).  How to get an
224      initial ldapACI in the directory is server specific and
225      beyond the scope of this model.
227 Servers can support multiple access control mechanisms, but
228 MUST be capable of supporting the LDAP Mechanism in the DIT
229 scoped by the rootDSE (entire server's DIT) for that server
230 and SHOULD be capable of supporting the LDAP mechanism in an
231 arbitrary part (subtree) of the DIT.
233 The accessControlSchemes attribute in the ldapACISubEntry
234 indicates which access control mechanism is in effect for
235 the scope of that ldapACISubEntry.  The
236 supportedAccessControlSchemes attribute in the rootDSE
237 indicates which acess control mechanisms are supported by
238 the server; those mechanisms are in effect in that server's
239 DIT unless overridden by a mechanism defined in a
240 ldapACISubEntry elsewhere in that DIT.
242 Changing the value(s) of either the
243 supportedAccessControlSchemes or accessControlSchemes
244 attributes changes the mechanism(s) in effect for the scope
245 of those attributes (where scope is either that of the
246 rootDSE or ldapACISubEntry).
248 Through the use of the mechanism rootDSE attribute and
249 ldapACI subentry, it is possible to run multiple mechanisms
250 in either the same subtree or separate subtrees.  If two
254 Stokes, et al      Expires 14 January 2001          [Page 4]
260 Internet-Draft      Access Control Model        14 July 2000
264 mechanisms are run in the same subtree, it is desirable that
265 the result be the same independent of mechanism, but
266 definition and discussion of this is beyond the scope of
267 this model.
271 3.  Access Control Mechanism Attributes
273 Two attributes are defined to identify which access control
274 mechanisms are supported by a given server and by a given
275 subtree:  supportedAccessControlSchemes and
276 accessControlSchemes.  (We chose these names based on the
277 X.500 attribute, AccessControlScheme which is single-valued
278 and defined in X.501).
281 3.1  Root DSE Attribute for Access Control Mechanism
283 The server advertises which access control mechanisms it
284 supports by inclusion of the 'supportedAccessControlSchemes'
285 attribute in the root DSE.  This attribute is a list of
286 OIDs, each of which identify an access control mechanism
287 supported by the server.  By default, these are also the
288 mechanisms in effect in subtrees beneath the root in that
289 server unless overridden by a ldapACISubEntry (see section
290 "Subentry Class Access Control Mechanism").
292  (<OID to be assigned>
293     NAME      'supportedAccessControlSchemes'
294     DESC      list of access control mechanisms supported
295                 by this directory server
296     SYNTAX    LDAPOID
297     USAGE     dSAOperation
300 The access control mechanism defined is:
301      LDAPv3     <OID to be assigned>
303 Other vendor access control mechanisms MAY be defined (by
304 OID) and are the responsibility of those vendors to provide
305 the definition and OID.
308 3.2  Root DSE Attribute for Control of Disclosing Errors
310 The server specifies whether it is permissible for the name
311 of an entry or attribute to be disclosed in an error (or
312 empty) operation result.  This rootDSE attribute is
313 discloseOnError.  The default for discloseOnError is false
314 (0) or not to disclose on error.  The lack of this attribute
318 Stokes, et al      Expires 14 January 2001          [Page 5]
324 Internet-Draft      Access Control Model        14 July 2000
328 in the rootDSE is interpreted as the default.
330  (<OID to be assigned>
331     NAME      'discloseOnError'
332     DESC      specify whether to return the name of an
333                 entry or attribute in an error (or
334                 empty) operation result; 0=do not
335                 disclose (default); 1=disclose
336     SYNTAX    LDAPString
337     USAGE     dSAOperation
340 3.3  Subentry Class Access Control Mechanism
342 A given naming context MUST provide information about which
343 access control mechanisms are in effect for that portion of
344 the namespace.  This information is contained in a subentry
345 (ldapACISubEntry class), derived from [SUBENTRY].
346 ldapACISubEntry MAY be used to define the scope of an access
347 control mechanism.  The value(s) held in the rootDSE
348 attribute, supportedAccessControlSchemes, are the mechanisms
349 in effect in subtrees beneath the root in that server unless
350 overridden in a ldapACISubEntry further down the tree held
351 by that server.  The scope of that ldapACISubEntry is to the
352 end of the subtree held by that server or until another
353 ldapACISubEntry is encountered in that subtree held by that
354 server.  The ldapACISubEntry class is defined as:
357  ( <OID to be assigned>
358      NAME   'ldapACISubEntry'
359      DESC   'LDAP ACI Subentry class'
360      SUP    ldapSubEntry STRUCTURAL
361      MUST   ( accessControlSchemes )
364 The accessControlSchemes attribute MUST be in each ldap
365 access control subentry entry associated with a naming
366 context whose access control mechanism is different from
367 adjacent naming contexts supported by that directory server.
368 accessControlSchemes lists the values (list of OIDs) that
369 define the access control mechanisms in effect for the scope
370 of that ldap access control subentry.  Although, in general,
371 this attribute will define only a single mechanism (single
372 value), more than one mechanism MAY be in effect for the
373 scope of that subentry.
375  (<OID to be assigned>
376     NAME      'accessControlSchemes'
377     DESC      list of access control mechanisms supported
378                 in this subtree
382 Stokes, et al      Expires 14 January 2001          [Page 6]
388 Internet-Draft      Access Control Model        14 July 2000
392     SYNTAX    LDAPOID
393     USAGE     dSAOperation
398 4.  The Access Control Information Attribute (ldapACI)
400 The access control information attribute, ldapACI, is
401 defined as:
403  (<OID to be assigned>
404    NAME      'ldapACI'
405    DESC      'ldap access control information'
406    EQUALITY  caseIgnoreMatch
407    SYNTAX    directoryString
408    USAGE     directoryOperation
411 The intent of the attribute definition is to design a common
412 interchange format.  Any given LDAP server should be able to
413 translate the below defined attribute into meaningful
414 operation requests. Each server should be able to understand
415 the attribute; there should not be any ambiguity into what
416 any part of the syntax means.
418 While the end goal is to have a common behavior model
419 between different LDAP server implementations, the attribute
420 definition alone will not ensure identical ACL processing
421 behavior between servers.  The semantics of how a server
422 interprets the ACI syntax are defined in the "Operational
423 Semantics of Access Control" section of this document.
424 Additionally, while the server must recognize and act on the
425 attribute when received over the wire, there are no
426 requirements for the server to physically store this
427 attribute.
429 The attribute definition maintains an assumption that the
430 receiving server supports inheritance within the security
431 model. If the server does not support inheritance, the
432 receiving server must expand any inherited information based
433 on the scope flag.  If the server does not support partial
434 inheritance and both the entry and subtree scope are used,
435 then entry is the prevailing scope.  (It is possible for two
436 values in the ldapACI attribute to have different scopes
437 given the syntax of ldapACI; one might contain 'entry' and
438 another might contain 'subtree'.  This implies that some
439 ldapACI values inherit down the DIT and othersdo not - hence
440 partial inheritance of the ldapACI attribute.)
442 The attribute is defined so access control information (ACI)
446 Stokes, et al      Expires 14 January 2001          [Page 7]
452 Internet-Draft      Access Control Model        14 July 2000
456 can be addressed in a server independent of server
457 implementation.  This attribute is used in typical LDAP APIs
458 and in LDIF output of ACI. This attribute may be queried or
459 set on all directory objects.  The BNF and definitions are
460 given below.
463 4.1  The BNF
466 4.1.1  ACI String Representation
468  Values of this syntax are encoded according to the
469  following BNF which follows the BNF encoding
470  conventions described in [ABNF]:
472  ldapACI = scope "#" rights "#" attr "#" subject
474  scope = "entry" / "subtree"
476  rights = (("grant:" / "deny:") permissions) /
477           ("grant:" permissions ";deny:" permissions)
479  permissions = [permission *("," permission)]
481  permission = "a" / ; add
482               "d" / ; delete
483               "e" / ; export
484               "i" / ; import
485               "n" / ; renameDN
486               "b" / ; browseDN
487               "t" / ; returnDN
488               "r" / ; read
489               "s" / ; search
490               "w" / ; write (mod-add)
491               "o" / ; obliterate (mod-del)
492               "c" / ; compare
493               "m" / ; make
495  attr = "[all]" / "[entry]" / (attribute *("," attribute))
497  attribute = ; OID syntax (1.3.6.1.4.1.1466.115.121.1.38)
498              ;     from [ATTR]
500  subject = ["authnLevel:" authnLevel ":"]
501              (("authzID-" authzID) /
502              ("role:" dn) /
503              ("group:" dn) /
504              ("subtree:" dn) /
505              ("ipAddress:" ipAddress) /
506              "public:" /
510 Stokes, et al      Expires 14 January 2001          [Page 8]
516 Internet-Draft      Access Control Model        14 July 2000
520              "this:")
522  authnLevel = "any" /
523               "simple" /
524               sasl
526  sasl = "sasl:"
527         ("any" /
528         mechanism)
530  mechanism = ; sasl mechanism from 4.2 of [LDAPv3]
532  authzID = ; authzID from [AuthMeth] repeated below
533            ;    for convenience
535  authzId = dnAuthzId / uAuthzId
537  ; distinguished-name-based authz id.
538  dnAuthzId  = "dn:" dn
540  dn = utf8string ; with syntax defined in [UTF]
542  ; unspecified userid, UTF-8 encoded.
543  uAuthzId   = "u:" userid
544  userid     = utf8string ; syntax unspecified
546  ipAddress = printableString
547                ; dotted decimal form (e.g. 10.0.0.6)
548                ; or use wildcards such as 12.3.45.* to
549                ;    specify a specific subnetwork
550                ; or 123.45.6.*+255.255.255.115 to
551                ;    specify a subnetmask
552                ; or use a wildcard domain name such as
553                ;    *.airius.com to specify a specific
554                ;    DNS domain
556  printableString ; printableString syntax from [ATTR]
559 Note that the colon following the "public" and "this"
560 subject options exist only to simplify string parsing.
562 Note also that per [AuthMeth], authzID may be expanded in
563 the future.
565 See section titled 'ACI Examples' for examples of the string
566 representation.
574 Stokes, et al      Expires 14 January 2001          [Page 9]
580 Internet-Draft      Access Control Model        14 July 2000
584 4.1.2  ACI Binary Representation
586  The following ASN.1 data type is used to represent this
587  syntax when transferred in binary form:
589  ldapACI ::= SEQUENCE {
590       scope      ENUMERATED {
591             entry       (0),
592             subtree     (1) },
593       rights     SEQUENCE OF CHOICE {
594             grant       [0] Permissions,
595             deny        [1] Permissions },
596       attr       CHOICE {
597             all         [0] NULL,
598             entry       [1] NULL,
599             attributes  [2] SEQUENCE OF Attribute },
600       subject    SEQUENCE {
601          authnLevel   CHOICE {
602             any      [0] NULL,
603             simple   [1] NULL,
604             sasl     [2] CHOICE {
605                any       [0] NULL,
606                mechanism [1] LDAPString -- from [LDAPv3]
607             }
608          },
609       subject    CHOICE {
610             dn          [0] DN,
611             user              [1] utf8String
612             role        [1] DN,
613             group       [2] DN,
614             subtree     [3] DN,
615             ipAddress   [4] IPAddress,
616             public      [6] NULL,
617             this        [7] NULL }, } -- may be expanded
618                                           per [AuthMeth]
620    Permissions ::= SEQUENCE OF ENUMERATED {
621       add        (0),
622       delete     (1),
623       export     (2),
624       import     (3),
625       renameDN   (4),
626       browseDN   (5),
627       returnDN   (6),
628       read       (7),
629       search     (8),
630       write      (9),
631       obliterate (10),
632       compare    (11),
633       make       (12) }
638 Stokes, et al      Expires 14 January 2001         [Page 10]
644 Internet-Draft      Access Control Model        14 July 2000
648    Attribute ::= AttributeType -- from [LDAPv3]
650    IPAddress ::= PrintableString -- (e.g. 10.0.0.6)
654 4.2  The Components of ldapACI Attribute
656 This section defines components that comprise the access
657 control information attribute, ldapACI.
660 4.2.1  Scope
662 Two scopes for access control information are defined:
664    - entry - the access control information in the ldapACI
665      attribute applies only to the entry in which it is
666      contained
668    - subtree - the access control information in the ldapACI
669      attribute applies to each entry down the subtree unless
670      it is overridden by an entry-specific ldapACI whose
671      values are more specific.
673 Use of prescriptive ACIs and scoping via use of a
674 ldapACISubEntry is outside the scope of this document.
677 4.2.2  Access Rights and Permissions
679 Access rights can apply to an entire object or to attributes
680 of the object. Access can be granted or denied.  Either or
681 both of the actions "grant" | "deny"  may be used when
682 creating or updating ldapACI.
684 Each of the LDAP access permissions are discrete. One
685 permission does not imply another permission.  The
686 permissions which apply to attributes and the entry parallel
687 the type of ldap operations that can be performed.
689 Permissions which apply to attributes:
691    r   Read        Read attribute values
692    w   Write       Modify-add values
693    o   Obliterate  Modify-delete values
694    s   Search      Search entries with specified attributes
695    c   Compare     Compare attributes
696    m   Make        Make attributes on a new entry below
697                      this entry
702 Stokes, et al      Expires 14 January 2001         [Page 11]
708 Internet-Draft      Access Control Model        14 July 2000
712   1.  r  Read
714       If granted, permits attributes and values to be
715       returned in a read or search operation.
717   2.  w  Write
719       If granted, permits attributes and values to be added
720       in a modify operation.
722   3.  o  Obliterate
724       If granted, permits attributes and values to be
725       deleted in a modify operation.
727   4.  s  Search
729       If granted, permits attributes and values to be
730       included in a search operation.
732   5.  c  Compare
734       If granted, permites attributes and value to be used
735       in a compare operation.
737   6.  m  Make
739       The attribute permission "m" is required for all
740       attributes that are placed on an object when it is
741       created. Just as the "w" and "o" permissions are used
742       in the Modify operation, the "m" permission is used in
743       the Add operation. Additionally, note that "w" and "o"
744       have no bearing on the Add operation and "m" has no
745       bearing on the Modify operation.  Since a new object
746       does not yet exist, the "a" and "m" permissions needed
747       to create it must be granted on the new object's
748       parent. This differs from "w" and "o" which must be
749       granted on the object being modified. The "m"
750       permission is distinct and separate from the "w" and
751       "o" permissions so that there is no conflict between
752       the permissions needed to add new children to an entry
753       and the permissions needed to modify existing children
754       of the same entry.
756 Note:  Modify-replace values of an attribute requires "w"
757 and "o" permission.
759 Permissions that apply to an entire entry:
762    a    Add        Add an entry below this entry
766 Stokes, et al      Expires 14 January 2001         [Page 12]
772 Internet-Draft      Access Control Model        14 July 2000
776    d    Delete     Delete this entry
777    e    Export     Export entry & subordinates to new
778                       location
779    i    Import     Import entry & subordinates from some
780                       location
781    n    RenameDN   Rename an entry's DN
782    b    BrowseDN   Browse an entry's DN
783    t    ReturnDN   Allows DN of entry to be disclosed in
784                       an operation result
787   1.  a  Add
789       If granted, permits creation of an entry in the DIT
790       subject to control on all attributes and values to be
791       placed in the new entry at time of creation.  In order
792       to add an entry, permission must also be granted to
793       add at least the mandatory attributes.
795   2.  d  Delete
797       If granted, permits the entry to be removed from the
798       DIT regardless of controls on attributes within the
799       entry.
801   3.  e  Export
803       If granted, permits an entry and its subordinates (if
804       any) to be exported; that is, removed from the current
805       location and placed in a new location subject to the
806       granting of suitable permission at the destination.
807       If the last RDN is changed, Rename is also required at
808       the current location. In order to export an entry or
809       its subordinates, there are no prerequisite
810       permissions to contained attributed, including the RDN
811       attributes; this is true even when the operation
812       causes new attribute values to be added or removed as
813       the result of the changes of RDN.
815   4.  i  Import
817       If granted, permits an entry and its suordinates (if
818       any) to be imported; that is, removed from some other
819       location and placed a t the location to which the
820       permission applies subject to the granting of suitable
821       permissions at the source location.  In order to
822       import an entry or its subordinates, there are no
823       prerequisite permissions to contained attributed,
824       including the RDN attributes; this is true even when
825       the operation causes new attribute values to be added
826       or removed as the result of the changes of RDN.
830 Stokes, et al      Expires 14 January 2001         [Page 13]
836 Internet-Draft      Access Control Model        14 July 2000
840   5.  n  RenameDN
842       Granting Rename is necessary for an entry to be
843       renamed with a new RDN, taking into account
844       consequential changes to the distinguished names of
845       subordinate entries, if any; if the name of the
846       superior is unchanged, the grant is sufficient.  In
847       order to rename an entry, there are no prerequisite
848       permissions to contained attributed, including the RDN
849       attributes; this is true even when the operation
850       causes new attribute values to be added or removed as
851       the result of the changes of RDN.
853   6.  b  BrowseDN
855       If granted, permits entries to be accessed using
856       directory operations which do not explicitly provide
857       the name of the entry.
859   7.  t  ReturnDN
861       If granted, allows the distinguished name of the entry
862       to be disclosed in the operation result.
864 All permissions (for grant and deny) for an attribute/entry
865 and a given subject MUST be contained within one ldapACI
866 value, i.e. (in abbreviated form)
868  ldapACI:  ...grant OID.attr1 subjectA
869  ldapACI:  ...deny OID.attr1 subjectA
871 must be ldapACI:  ...grant ... deny... OID.attr1 subjectA
873 Using the defined BNF it is possible for the permission
874 string to be empty. The ACI
876  ldapACI: subtree#grant#OID.attr1#group:cn=Dept XYZ,c=US
878  ldapACI: subtree#grant:r,s#[all]#group:cn=Dept XYZ,c=US
880 means that this group (Dept XYZ) is granted permission to
881 read and search all attributes except OID.attr1 because
882 OID.attr1 is more specific than "[all]".
885 4.2.3  Attributes
887 Attribute describes an attribute name in the form of a
888 dotted decimal OID for that <attr>. If the string (OID)
889 refers to an attribute not defined in the given server's
890 schema, the server SHOULD report an error. "[entry]" means
894 Stokes, et al      Expires 14 January 2001         [Page 14]
900 Internet-Draft      Access Control Model        14 July 2000
904 the permissions apply to the entire object. This could mean
905 actions such as delete the object, or add a child object.
906 "[all]" means the permission set apply to all attributes of
907 the entry.
909 If the keyword "[all]" and another attribute are both
910 specified within an ACI, the more specific permission set
911 for the attribute overrides the less specific permission set
912 for "[all]".
915 4.2.4  Subjects and Associated Authentication
917 The following subjects are defined and MUST be supported:
919    - authzID, defined per [authmeth]
921    - group, defined as the distinguished name of a
922      groupOfNames or groupOfUniqueNames entry
924    - role
926    - subtree, defined as the distinguished name of a non-
927      leaf node in the DIT
929    - ipAddress,
931    - public, defined as public access
933    - this, defined as the user whose name matches that of
934      the entry being accessed
936 Other parties MAY define other subjects.  It is the
937 responsibility of those parties to provide the definition.
939 A subject may be qualified by the type of authentication
940 required for access to a given attribute(s) or entry.  If no
941 authnLevel is present, then no specific type of
942 authentication is additionally required for access.  If
943 authnLevel is specified, then that type of authentication is
944 additionally required for access.  The authnLevels parallel
945 the authentication mechanisms specified for LDAPv3:  simple,
946 SASL (any type of SASL mechanism), and a SASL-specific
947 mechanism.  The authnLevel of is not an acceptable mechanism
948 for this case) as part of obtaining access.
951 4.3  Grant/Deny Evaluation Rules
953 The decision whether to grant or deny a client access to a
954 particular piece of information is based on several pieces
958 Stokes, et al      Expires 14 January 2001         [Page 15]
964 Internet-Draft      Access Control Model        14 July 2000
968 of information found within the ldapaci value.  Throughout
969 the decision making process, there are guiding principals.
971    - Specificity: More specific policies MUST override less
972      specific ones (e.g. individual user entry in ACI takes
973      precedence over group entry).
975    - Deny takes precedence over Grant.
977    - When there are conflicting ACI values, deny takes
978      precedence over grant.
980    - Deny is the default when there is no access control
981      information.
983 Precendence of Scope Types (highest to lowest)
985    - entry
987    - subtree
989 Precedence of Subjects within a Scope (highest to lowest):
991    - ipAddress
993    - authzID, this
995    - group, role, this, public
997    - subtree, public
999 Although other types MAY be defined given the BNF, use of
1000 the well-known types aids in interoperability and
1001 operational consistency.
1003 Access Decision algorithm:
1005   1.  Determine all the ldapACI values which could apply to
1006       the target DN which is being accessed.  This is the DN
1007       of the entry which is being queried in a search,
1008       modified, deleted, etc.  When determining all the
1009       ldapACI values, the scope field should be used. All
1010       ldapACI values with a scope of 'entry' take precedence
1011       over ldapACI values with a scope of 'subtree'.
1013   2.  Determine which ldapACI (of the set determined in step
1014       1) apply to the bound DN.  This is determined by
1015       looking at the subject (combination of subject type
1016       and subject value) and bind type.  If no bind is in
1017       effect (this is possible in ldapv3), then treat this
1018       lack of bind as if bound as anonymous.  Start with the
1022 Stokes, et al      Expires 14 January 2001         [Page 16]
1028 Internet-Draft      Access Control Model        14 July 2000
1032       most specific subject type.  If at any time, at least
1033       one ldapACI value exists for a specificity level, then
1034       processing stops; the exception here is 'this' because
1035       this may also be combined with group to use power of
1036       'this'.   Evaluation should take place on set of
1037       ldapACI values which are all of the same specificity
1038       level.  Subjects of the same precedence are combined
1039       using union semantics.
1041   3.  Evaluate the remaining ldapACI values and determine a
1042       grant/deny decision.  If conflicting ldapACI value
1043       exists for the same attribute, or attributes (i.e. one
1044       ldapACI grants permission and another denies
1045       permission), then deny takes precedence over grant.
1046       For example, if one is granted permission to
1047       "objectclass" in one ldapACI value by being a member
1048       of group cn=Admin, and denied permission by being a
1049       member of cn = NontrustedAdmins, then the bound user
1050       would not receive permission to objectclass.
1052       The rule of specificity also applies to the
1053       attributes. If one is denied permission to "[ all ]"
1054       attributes, but granted permission to "objectclass"
1055       then the more specific value of  "objectclass" takes
1056       precedence over the less specific value of "[ all ] ".
1057       In this case the user would be granted permission to
1058       "objectclass" but denied permission to all other
1059       attributes.
1063 5.  Required Permissions for each LDAP Operation
1065 This section defines the required permissions for each LDAP
1066 operation but even if these requirements are satisfied the
1067 server MAY refuse to carry out the operation due to other
1068 implementation specific security considerations. For
1069 example, a server may refuse to modify an entry because the
1070 database where that entry resides is in read only mode.
1071 Another example might be that although the access control is
1072 available to the userPassword attribute a server may refuse
1073 modifications due to some server specific policy governing
1074 access to passwords.
1076 Here, we specify the rights required by a user when
1077 performing an LDAP operation in terms of the LDAP
1078 permissions specified in section 6.1.  Recall that  "a, d,
1079 e, i, n, b,t" are permissions that apply to entries as a
1080 whole while permissions "r, s, w, o, c, m" apply to
1081 attributes within entries.
1086 Stokes, et al      Expires 14 January 2001         [Page 17]
1092 Internet-Draft      Access Control Model        14 July 2000
1096 Required permissions for LDAP extended operations and LDAP
1097 controls are beyond the scope of this draft.
1099 There is a requirement that a user should not be able to
1100 infer the existence of data in the Directory, if the user
1101 does not have the required access rights to that data.  An
1102 example of this requirement would be in a hosting
1103 environment where you would not want any users from the coke
1104 subtree to be able to even discover that the pepsi tree was
1105 hosted on the same server.  This "discloseOnError" feature
1106 will be set once for server in the rootDSE advertised by the
1107 attribute discloseOnError.  The default for discloseOnError
1108 is false (0).  The lack of this attribute in the rootDSE is
1109 interpreted as the default.  The details of its effects are
1110 addressed below, operation by operation.
1112 For the following, assume that the authorization identity of
1113 the user doing the operation is authzID.
1116 5.1  Bind Operation
1118 This draft does not require any permissions to allow a bind
1119 operation to proceed.
1122 5.2  Search Operation
1124 Recall that the parameters of the Search operation per RFC
1125 2251 [LDAPv3] Section 4.5 are:
1127    SearchRequest ::= [APPLICATION 3] SEQUENCE {
1128         baseObject      LDAPDN,
1129         scope           ENUMERATED {
1130                 baseObject              (0),
1131                 singleLevel             (1),
1132                 wholeSubtree            (2) },
1133         derefAliases    ENUMERATED {
1134                 neverDerefAliases       (0),
1135                 derefInSearching        (1),
1136                 derefFindingBaseObj     (2),
1137                 derefAlways             (3) },
1138         sizeLimit       INTEGER (0 .. maxInt),
1139         timeLimit       INTEGER (0 .. maxInt),
1140         typesOnly       BOOLEAN,
1141         filter          Filter,
1142         attributes      AttributeDescriptionList }
1144 Suppose a server is processing a search request from user
1145 authzID with parameters as above and is processing the entry
1146 with dn candidateDN to decide if it may be returned or not.
1150 Stokes, et al      Expires 14 January 2001         [Page 18]
1156 Internet-Draft      Access Control Model        14 July 2000
1160 Then the permissions required by authzID that need to be
1161 evaluated are as follows:
1164   1.  permission "b" to the entry candidateDN
1166       If this permission is not granted then the dn
1167       candidateDN MUST not be returned nor any attribute
1168       type nor attribute value from this entry.
1170       If this permission is granted then the dn candidateDN
1171       MAY be returned.
1173       Note: The idea of the "b" permission is to say "a user
1174       has discovery rights" at a certain entry in the
1175       directory.  Assuming that the further required
1176       permissions below are satisfied then having "b" right
1177       is enough to allow the server to return candidateDN.
1178       Of course candidateDN contains in it's components,
1179       attributes and attribute values for all the ancestors
1180       of candidateDN.  This can lead to the slightly odd
1181       situation that we can discover the naming attribute of
1182       an entry and that attribute's value by virtue of
1183       having the required searching permissions to it's
1184       child but not by searching the entry directly.
1186   2.  permission "s" to each attribute appearing in a
1187       presence test during the evaluation of the search
1188       filter.  permission "r" to each attribute appearing in
1189       non-presence tests (see rfc1960, section 3:
1190       equalityMatch, substrings, greaterOrEquial,
1191       lessOrEqual, present, approxMatch, extensibleMatch)
1192       during the evaluation of the search filter.
1194       The above statement covers the case where the
1195       attributes are being evaluated as part of an
1196       extensibleMatch (RFC 2251 section 4.5.1) which appears
1197       in the filter.  In the case where the dnAttributes
1198       field of the extensibleMatch is true then we do not
1199       require any access checks to the attributes of the dn
1200       candidateDN as access to these is taken to be granted
1201       by the "b" permission, which has already been required
1202       above.
1204       If there is an attribute in a filter element to which
1205       the required permission is not granted then that
1206       filter element evaluates to "Undefined" of the three-
1207       valued-logic of X.511(93).
1209       Note A: Although both "r" and "s" permissions will
1210       typically be granted to attributes we keep both
1214 Stokes, et al      Expires 14 January 2001         [Page 19]
1220 Internet-Draft      Access Control Model        14 July 2000
1224       permissions as there are cases where the distinction
1225       is useful.  For example, the ability to grant the
1226       right to discover that a user entry contains a
1227       userPassword attribute, but not to read it's value
1228       ("s" but not "r").  The converse, granting "r" but not
1229       "s" permission is less easy to motivate.
1231       Note B: There is an unusual behaviour with respect to
1232       naming attributes illustrated in the following
1233       example:
1235       Suppose I have "b" rights to cn=fred,o=sun.com and "r"
1236       rights to attribute objectclass but not "r" rights to
1237       cn then with search filter (objectclass=*) I get back
1238       the dn and objectclass (and so can see the value of
1239       cn), but with a search filter of (cn=fred) I do not
1240       get anything.
1242   3.  permission "r" to each attribute in the attribute list
1244       AttributeDescriptionList (or all attributes in the
1245       entry candidateDN if AttributeDescriptionList is *)
1246       whose type and/or value will be returned.
1248       Note: The presence of an attribute in an entry is only
1249       ever volunteered by the server if "r" permission is
1250       granted to it, though a user may infer the presence of
1251       an attribute with "s" permission by using a presence
1252       test on that attribute in the search filter.
1254   4.  permission "t" to the entry candidateDN
1256       If this permission is not granted then the dn
1257       candidateDN MUST NOT be returned. If the server knows
1258       of an alias for the entry, this alias may be returned
1259       instead. If no alias name is available then the entry
1260       candidateDN MUST be omitted from the search results.
1263   5.  Disclose on error for the Search operation
1265       If every entry in the scope of the search fails to
1266       satisfy item 1 (browse right on the candidate entry)
1267       or item 2 (right to use the filter on that entry) and
1268       if discloseOnError is not granted to the baseObject
1269       entry then the operation MUST fail with a "no such
1270       object error" and the matchedDN of the LDAPResult MUST
1271       be set to "". If every entry in the scope of the
1272       search fails to satisfy items 1 or 2 above and
1273       discloseOnError is granted to the baseObject then the
1274       empty set of results is returned.
1278 Stokes, et al      Expires 14 January 2001         [Page 20]
1284 Internet-Draft      Access Control Model        14 July 2000
1288 5.3  Modify Operation
1290 Recall that the parameters of the Modify operation per
1291 RFC2251 [LDAPv3] Section 4.6 are:
1293    ModifyRequest ::= [APPLICATION 6] SEQUENCE {
1294         object          LDAPDN,
1295         modification    SEQUENCE OF SEQUENCE {
1296                 operation  ENUMERATED {
1297                                    add     (0),
1298                                    delete  (1),
1299                                    replace (2) },
1300                 modification    AttributeTypeAndValues } }
1303    AttributeTypeAndValues ::= SEQUENCE {
1304         type    AttributeDescription,
1305         vals    SET OF AttributeValue }
1307 Then the permissions required by authzID that need to be
1308 evaluated are as follows:
1311   1.  permission "w" to each attribute being added to object
1313       If this permission is not granted to such an
1314       attribute, then the operation MUST fail.  In this
1315       case, if discloseOnError is not granted to the entry
1316       then "no such object" error is returned; if
1317       discloseOnError is granted to the entry and a
1318       duplicate attribute value is being added then
1319       "attribute value already exists" error is returned; if
1320       discloseOnError is granted to the entry and no
1321       duplicate value is being added then an "insufficient
1322       access" error is returned.
1324   2.  permission "o" to each attribute for which a value is
1325       being deleted from object
1327       If this permission is not granted to such an attribute
1328       then the operation MUST fail.  In this case, if
1329       discloseOnError is not granted to the entry then "no
1330       such object" error is returned; if discloseOnError is
1331       granted to the entry and the attribute or one of the
1332       values to be deleted does not exist then a "no such
1333       attribute or value" error is returned; if
1334       discloseOnError is granted to the entry and the
1335       attribute and all values specified to be deleted exist
1336       then an "insufficient access" error is returned.
1342 Stokes, et al      Expires 14 January 2001         [Page 21]
1348 Internet-Draft      Access Control Model        14 July 2000
1352   3.  permissions "o" and "w" to each attribute being
1353       replaced in object
1355       If one of these these permissions is not granted to
1356       such an attribute then the operation MUST fail.  In
1357       this case, if discloseOnError is not granted to the
1358       entry then a "no such object" error is returned; if
1359       discloseOnError is granted to the entry then
1360       "insufficient access" error is returned.
1363 5.4  Add Operation
1365 Recall that the parameters of the Add operation per RFC2251
1366 [LDAPv3] Section 4.7 are:
1368    AddRequest ::= [APPLICATION 8] SEQUENCE {
1369         entry           LDAPDN,
1370         attributes      AttributeList }
1373    AttributeList ::= SEQUENCE OF SEQUENCE {
1374         type    AttributeDescription,
1375         vals    SET OF AttributeValue }
1377 Then the permissions required by authzID that need to be
1378 evaluated are as follows:
1380       permission "a" to the parent of entry
1382       The access rights required for the creation of a root
1383       entry in the Directory are beyond the scope of this
1384       document.  They will be vendor specific.
1386   1.  permission "m" to the parent of entry for each
1387       attribute being added to entry
1389 If any of these permissions are not granted then the
1390 operation MUST fail.  In this case if discloseOnError is on
1391 and the entry to be added does not already exist then
1392 "insufficient access" is returned.  If it does exist then
1393 "Entry already exists" is returned.  If discloseOnError is
1394 off then "No such object" is returned (meaning the parent
1395 object).
1397 If they are all granted then the operation MAY proceed.
1399 Note: We require "m" permission to each attribute to prevent
1400 an entry from aquiring "unintended" rights (via group or
1401 role membership),  to stop a "rogue" ACI being added that
1402 would prevent even admins deleting the entry and general
1406 Stokes, et al      Expires 14 January 2001         [Page 22]
1412 Internet-Draft      Access Control Model        14 July 2000
1416 consistency with the MODIFY operation.
1418 Note: The access rights required for the creation of the
1419 first entry in the directory are beyond the scope of this
1420 document.
1423 5.5  Delete Operation
1425 Recall that the parameters of the Delete operation per
1426 RFC2251 [LDAPv3] Section 4.10 are:
1428     DelRequest ::= [APPLICATION 10] LDAPDN
1430 Then the permissions required by authzID that need to be
1431 evaluated are as follows:
1434   1.  permission "d" to the entry in the Delete request
1436 If this permission is not granted, then the operation MUST
1437 fail.  In this case if discloseOnError is on and the entry
1438 to be deleted exists then "insufficient access" is returned.
1439 If it does not exist then "No such Object" is returned.  If
1440 discloseOnError is off then "No such object" is returned
1441 (meaning the parent object).
1443 If this permission is granted, then the operation MAY
1444 proceed.
1446 Note: One could also require the "o" permission to be
1447 granted to allow the operation to proceed, but customer
1448 experience has shown that the requirement of the additional
1449 permission is not useful nor expected, and X.500 requires
1450 only the "d" permission.
1453 5.6  Modify DN Operation
1455 Recall that the parameters of the Modify DN operation per
1456 RFC2251 [LDAPv3] Section 4.6 are:
1458    ModifyDNRequest ::= [APPLICATION 12] SEQUENCE {
1459         entry           LDAPDN,
1460         newrdn          RelativeLDAPDN,
1461         deleteoldrdn    BOOLEAN,
1462         newSuperior     [0] LDAPDN OPTIONAL }
1464 Then the permissions required by authzID that need to be
1465 evaluated are as follows:
1470 Stokes, et al      Expires 14 January 2001         [Page 23]
1476 Internet-Draft      Access Control Model        14 July 2000
1480   1.  If newSuperior is not present (ie. only the RDN is
1481       being renamed) then permission "n" to entry is
1482       required.
1484   2.  If newSuperior is present then permission "e" to entry
1485       and permission "i" to newSuperior are required.
1487 If any of these permissions are not granted then the
1488 operation MUST fail.  In this case, if discloseOnError is on
1489 then an "insufficient access error" is returned.  Otherwise,
1490 "No  such object" is returned.
1492 If they are all granted then the operation MAY proceed.
1494 Note A: We do not require any additional permissions in the
1495 case where deleteoldrdn is TRUE.
1497 Note B: These permissions allow the naming attribute of an
1498 entry (or entries) to be changed even though "o" and "w"
1499 permissions are not available on the entry.  Distinguishing
1500 the permissions like this allows us to grant permissions for
1501 the ModifyDN operation, but not the Modify operation and
1502 vice versa.
1505 5.7  Compare Operation
1507 Recall that the parameters of the Compare operation per
1508 RFC2251 [LDAPv3] Section 4.10 are:
1510    CompareRequest ::= [APPLICATION 14] SEQUENCE {
1511         entry           LDAPDN,
1512         ava             AttributeValueAssertion }
1514 Then the permissions required by authzID that need to be
1515 evaluated are as follows:
1518   1.  permission "c" to the attribute in entry on which the
1519       comparison is being made.
1521 If any of these permissions are not granted then the
1522 operation MUST fail.  In this case, if discloseOnError is on
1523 then an "insufficient access error" is returned.  Otherwise,
1524 "No  such object" is returned.
1526 If they are all granted then the operation MAY proceed.
1534 Stokes, et al      Expires 14 January 2001         [Page 24]
1540 Internet-Draft      Access Control Model        14 July 2000
1544 5.8  Abandon Operation
1546 Recall that the parameters of the Abandon operation per
1547 RFC2251 [LDAPv3] Section 4.6 are:
1549    AbandonRequest ::= [APPLICATION 16] MessageID
1551 authzID always has the right to send an Abandon Operation
1552 for an operation he previously initiated.
1555 5.9  Extended Operation
1557 Recall that the parameters of the Extended operation per
1558 RFC2251 [LDA{v3] Section 4.12 are:
1560    ExtendedRequest ::= [APPLICATION 23] SEQUENCE {
1561         requestName      [0] LDAPOID,
1562         requestValue     [1] OCTET STRING OPTIONAL }
1564 The access required for an Extended Operation is beyond the
1565 scope of this document.  The required access will normally
1566 be defined by the implementor of the extended request.
1570 6.  Required Permissions for Handling Aliases and References
1573 Use of aliases and referrals are part of LDAPv3.  However,
1574 neither is particularly well-defined.  Alias
1575 objects/attributes are defined in RFC 2256 as derived from
1576 X.500, but LDAPv3 does not explicitly define its semantics
1577 or behavior.  X.500 does define alias semantics and behavior
1578 with respect to access control; we define its behavior in
1579 LDAPv3 based on the X.511, section 7.11.1.  Referrals and
1580 knowledge information are still under design in LDAPv3; they
1581 are defined in X.500, however, X.500 punts on their
1582 semantics and behavior with respect to access control.  We
1583 define their semantics and behavior in LDAPv3 in terms that
1584 should be independent of the future LDAPv3 definition of
1585 referrals and knowledge information.
1588 6.1  ACI Distribution
1590 Currently there is no LDAP standard defining how to
1591 distribute directory data between LDAP servers. Consequently
1592 this draft cannot fully specify the behavior of the Access
1593 Control Model in a distributed environment. The case of
1594 distribution via referrals is treated in the "Referrals"
1598 Stokes, et al      Expires 14 January 2001         [Page 25]
1604 Internet-Draft      Access Control Model        14 July 2000
1608 section below. In the case of chaining (where one LDAP
1609 server forwards a request to another on behalf of a client)
1610 then it is server specific how the access control model
1611 behaves in this environment. Similarly it is server specific
1612 how the server determines whether the chaining of an
1613 operation is permitted in the first place. For example, the
1614 implementation may choose to regard the local naming context
1615 and the remote subordinate naming context as seperate Access
1616 Control Specific Areas, or it may regard the DIT as one
1617 Access Control Specific Area and implement mechanisms to
1618 propagate access control information between the two
1619 servers. The behavior of the Access Control Model in
1620 distributed environments such as these is beyond the scope
1621 of this draft.
1624 6.2  Aliases
1626 There are two things to protect with respect to aliases:
1627 the real name of the aliased object and the location of the
1628 server holding it.
1630 If alias de-referencing is required in the process of
1631 locating a target entry, no specifc permissions are
1632 necessary for alias de-referencing to take place. Access
1633 control is enforced at the object pointed to by the alias.
1635 If alias de-referencing would result in a
1636 continuationReference (e.g. from a search operation), then
1637 browse permission is required to the alias entry and read
1638 permission is required to the 'aliasedObjectName' attribute.
1639 Requiring these permission closes the hole of discovery.
1642 6.3  Referrals
1644 If a referral is to be followed, no specifc permissions are
1645 necessary for the ldap client to follow the referral. Access
1646 control is enforced at the referenced object.  If a referral
1647 is returned, then browse is required on the entry and read
1648 permission is required to the attribute containing the
1649 referral (we cannot name this attribute exactly today
1650 because there are no RFCs on this - only drafts). If the
1651 server implements a default referral, then no special
1652 permissions are required to read and return that referral.
1653 Requiring these permissions closes the hole of discovery.
1654 In the default case, it is assumed that a default referral
1655 is public.
1662 Stokes, et al      Expires 14 January 2001         [Page 26]
1668 Internet-Draft      Access Control Model        14 July 2000
1672 7.  Controlling Access to Access Control Information
1674 The ldapACI attribute is used to specify control for who has
1675 permission to set/change access control information
1676 (ldapACI).  The ldapACI attribute/OID is just another
1677 attribute described with a scope, set of rights and
1678 permissions, and subject as a value of the ldapACI
1679 attribute.  (See the example in the "ACI Examples" section).
1681 If the policy for controlling the ldapACI attribute is not
1682 specified for any object in the tree, behavior is
1683 implementation defined. For instance, if no object anywhere
1684 in the tree defines the access for ldapACI within the
1685 ldapACI attribute, then the server could simply assert that
1686 the 'root DN' is considered the policy owner (controller for
1687 controlling access control) for all objects.
1691 8.  ACI Examples
1693 Note that in the examples, the form "OID.<attrname>" refers
1694 to the OID in dotted decimal form for the attribute
1695 <attrname>.  This shorthand notation is used only for the
1696 examples.  In implementation, the dotted decimal form of the
1697 OID is used.
1700 8.1  Attribute Definition
1702 The following examples show the access required to control
1703 access to the ldapACI attribute.  The first example shows
1704 controlling the access control on an individual entry and
1705 its attributes.  The second example shows controlling the
1706 access control on a subtree.
1708  ldapACI: entry#grant:r,w#
1709     OID.ldapACI#authnLevel:any:role:cn=aciAdmin
1711  ldapACI: subtree#grant:r,w#
1712     OID.ldapACI#authnLevel:any:role:cn=aciAdmin
1714 The next example shows a ldapACI attribute where a group
1715 "cn=Dept XYZ, c=US" is being given permissions to read,
1716 search, and compare attribute attr1. The permission applies
1717 to the entire subtree below the node containing this ACI.
1718 Authentication of a specified type is not required.
1720  ldapACI:subtree#grant;r,s,c#
1721       OID.attr1#group:cn=Dept XYZ,c=US
1726 Stokes, et al      Expires 14 January 2001         [Page 27]
1732 Internet-Draft      Access Control Model        14 July 2000
1736 The next example shows an ACI attribute where a role
1737 "cn=SysAdmins,o=Company" is being given permissions to add
1738 objects below this node and read, search, and compare
1739 attributes attr2 and attr3. The permission applies to the
1740 entire subtree below the node containing this ACI.
1742  ldapACI: subtree#grant:a#
1743             [entry]#role:cn=SysAdmins,o=Company
1745  ldapACI: subtree#grant:r,s,c#
1746             OID.attr2#role:cn=SysAdmins,o=Company
1748  ldapACI: subtree#grant:r,s,c#
1749             OID.attr3#role:cn=SysAdmins,o=Company
1752 8.2  Modifying the ldapACI Values
1754 Modify-Replace works as defined in the ldap operation
1755 modify. If the attribute value does not exist, create the
1756 value. If the attribute does exist, replace the value.  If
1757 the ldapACI value is replaced, all ldapACI values are
1758 replaced.
1760 A given ldapACI for an entry:
1762  ldapACI: subtree#deny:r,w#[all]#group:cn=Dept ABC
1764  ldapACI: subtree#grant:r#OID.attr1#group:cn=Dept XYZ
1766 perform the following change:
1768   dn: cn=someEntry
1769   changetype: modify
1770   replace: ldapACI
1771   ldapACI: subtree#grant:r,w#[all]#group:cn=Dept LMN
1773 The resulting ACI is:
1775 ldapACI: subtree#grant:r,w#[all]#group:cn=Dept LMN
1777 ( ldapACI values for Dept XYZ and ABC are lost through the
1778 replace )
1780 During an ldapmodify-add, if the ACI does not exist, the
1781 create the ACI with the specific ldapACI value(s).  If the
1782 ACI does exist, then add the specified values to the given
1783 ldapACI.  For example a given ACI:
1785 ldapACI: subtree#grant:r,w#[all]#group:cn=Dept XYZ
1790 Stokes, et al      Expires 14 January 2001         [Page 28]
1796 Internet-Draft      Access Control Model        14 July 2000
1800 with a modification:
1802   dn: cn=someEntry
1803   changetype: modify
1804   add: ldapACI
1805   ldapACI: subtree#grant:r#OID.attr1#group:cn=Dept XYZ
1807 would yield an multi-valued ACI of:
1809  ldapACI: subtree#grant:r,w#[all]#group:cn=Dept XYZ
1811  ldapACI: subtree#grant:r#OID.attr1#group:cn=Dept XYZ
1813 To delete a particular ACI value, use the regular ldapmodify
1814 - delete syntax
1816 Given an ACI of:
1818  ldapACI: subtree#grant:r,w#[all]#group:cn=Dept XYZ
1819  ldapACI: subtree#grant:r#OID.attr1#group:cn=Dept XYZ
1821   dn: cn = some Entry
1822   changetype: modify
1823   delete: ldapACI
1824   ldapACI: subtree#grant:r#OID.attr1#group:cn=Dept XYZ
1826 would yield a remaining ACI on the server of
1828 ldapACI: subtree#grant:r,w#[all]#group:cn=Dept XYZ
1830 The attributes which are defined for access control
1831 interchange may be used in all LDAP operations.
1833 Within the ldapmodify-delete operation, the entire acl may
1834 be deleted by specifying
1836  dn: cn = some Entry
1837  changetype: modify
1838  delete: ldapACI
1840 In this case, the entry would then inherit its ACI from some
1841 other node in the tree depending on the server inheritance
1842 model.
1844 Similarly, if all values of ldapACI are deleted, then the
1845 access control information for that entry is defined by that
1846 implementation's inheritance model.
1854 Stokes, et al      Expires 14 January 2001         [Page 29]
1860 Internet-Draft      Access Control Model        14 July 2000
1864 8.3  Evaluation
1866 These examples assume that the ldapACI entries listed in
1867 each example are the only ACI which applies to the entry in
1868 question; if backing-store ACI also exists, the effective
1869 policy may be different from that listed in each example.
1870 See section 10 for a discussion of the semantics of ldapACI
1871 entries when backing-store ACI administration is also used.
1873 Assume cn=jsmith is a member of group cn=G1.  Assume
1874 cn=jsmith is a member of group cn=G2.
1876  Example #1
1877  dn: o=XYZ, c=US
1878  ldapACI: subtree#grant:r#attr1
1879             #authzID-dn:cn=jsmith,ou=ABC,o=XYZ,c=US
1880  ldapACI: subtree#grant:w#attr1
1881             #group:cn=G1,ou=ABC,o=XYZ,c=US
1883  What rights does cn=jsmith have to attr1 of o=XYZ,c=US?
1884  Read (r) access; authzID is higher precedence than
1885  group.
1888  Example #2
1889  dn: o=XYZ, c=US
1890  ldapACI: subtree#grant:r#attr2
1891             #group:cn=G1,ou=ABC,o=XYZ,c=US
1892  ldapACI: subtree#grant:w#attr2
1893             #group:cn=G2,ou=ABC,o=XYZ,c=US
1895  What rights does cn=jsmith have to attr2 of o=XYZ,c=US?
1896  Read-write (r,w) access; ACI is combined because both
1897  subjects (group) have same precedence.
1900  Example #3
1901  dn: o=XYZ, c=US
1902  ldapACI: subtree#grant:r,w#attr3
1903             #group:cn=G1,ou=ABC,o=XYZ,c=US
1904  ldapACI: subtree#deny:w#attr3#group:cn=G2,ou=ABC,o=XYZ,c=US
1906  What rights does cn=jsmith have to attr3 of o=XYZ, c=US?
1907  Read access; write is denied (deny has precedence over
1908  grant).
1911  Example #4
1912  dn: o=XYZ, c=US
1913  ldapACI: subtree#grant:w#attr4
1914             #authzID-dn:cn=jsmith,ou=ABC,o=XYZ,c=US
1918 Stokes, et al      Expires 14 January 2001         [Page 30]
1924 Internet-Draft      Access Control Model        14 July 2000
1928  ldapACI: subtree#grant:r#attr4#subtree:ou=ABC,ou=XYZ,c=US
1930  What rights does cn=jsmith have to attr4 of o=XYZ, c=US?
1931  Write (w); rights given to an authzID take precedence
1932  over those given to a subtree.
1935  Example #5
1936  dn: o=XYZ, c=US
1937  ldapACI: subtree#grant:m#OID.attr5
1938             #authzID-dn:cn=jsmith,o=ABC,c=US
1939  ldapACI: subtree#grant:m#OID.cn
1940             #authzID-dn:cn=jsmith,o=ABC,c=US
1941  ldapACI: subtree#grant:m#OID.sn
1942             #authzID-dn:cn=jsmith,o=ABC,c=US
1943  ldapACI: subtree#grant:a#[entry]
1944             #authzID-dn:#cn=jsmith,o=ABC,c=US
1946  What rights does cn=jsmith have to o=XYZ, c=US?
1947  Make(m) on attributes attr5, cn, and sn and Add(a)
1948  on the entry.  These are the minimal yet sufficient
1949  permissions to create a new object,
1950  cn=New, o=XYZ, c=US with values for the attr5, cn,
1951  and sn attributes.  This example illustrates how the
1952  "m" permission can be used to limit the attributes
1953  that can be created on a new entry.
1955  Example #6
1956  dn: c=US
1957  ldapACI: subtree#grant:m#[all]#subtree:c=US
1958  dn: o=XYZ, c=US
1959  ldapACI: subtree#grant:a#[entry]#
1960             authzID-dn:cn=jsmith,o=ABC,c=US
1962  What rights does cn=jsmith have to o=XYZ, c=US?
1963  Make(m) on attributes all attributes and Add(a) on the
1964  entry. These are sufficient permissions to create a new
1965  object, cn=New, o=XYZ, c=US with values any desired
1966  attributes.  For administrators who do not wish to limit
1967  the attributes that can be created on new entries, this
1968  example shows how a single ldapACI at the top of the
1969  domain solves the problem.
1973 9.  Operational Semantics of Access Control Operations
1975 The semantics of access control operations described in this
1976 document are defined operationally in terms of "histories".
1977 A history is a sequence of actions (x1, x2, ..., xN).
1982 Stokes, et al      Expires 14 January 2001         [Page 31]
1988 Internet-Draft      Access Control Model        14 July 2000
1992 9.1  Types of actions
1994 We consider five types of actions:
1996    - LDAP Access Control Policy Update actions: invocations
1997      of ldap modify when used to add, delete, or replace the
1998      aci attribute; invocations of ldap add when used to add
1999      an entry with an aci attribute.  A LDAP Access Control
2000      Policy Update action may replace the policy (by
2001      completely replacing the aci attribute with new policy
2002      information) or it may grant or deny specific rights
2003      while leaving others unaffected.
2005    - LDAP Access Control Policy Query operations:
2006      invocations of ldap search when used to retrieve the
2007      aci attribute; invocations of ldap search with the
2008      getEffectiveRightsRequest control; invocations of the
2009      ldapGetEffectiveRightsRequest extended operation.
2011    - Datastore Access Control Policy Update Actions: any
2012      operation implemented by the server which LDAP is using
2013      as its datastore which changes the access policy
2014      enforced with respect to attempts to access LDAP
2015      directory entries and their attributes.
2017    - LDAP Access Request operations: invocations of LDAP
2018      entry or attribute access operations (Read, Update,
2019      Search, Compare, etc...).
2021    - Other operations: anything else, including Datastore
2022      operations which do not change the access policy
2023      enforced by the server.
2026 9.2  Semantics of Histories
2028 The semantics of histories are defined as follows:
2030    - LDAP Update (Replace), LDAP Query
2032      The Query will show that the subject has all rights
2033      granted by the Update operation, and no rights not
2034      granted by the Update operation.
2036    - LDAP Update (Grant), LDAP Query
2038      The Query will show that the subject has all rights
2039      granted by the Update operation.  The Query may show
2040      that the subject also has other rights not granted by
2041      the Update operation, depending on the policy in force
2042      before the Update operation.
2046 Stokes, et al      Expires 14 January 2001         [Page 32]
2052 Internet-Draft      Access Control Model        14 July 2000
2056    - LDAP Update (Deny), LDAP Query
2058      The Query will show that the subject does not have any
2059      right denied by the Update operation.  The Query may
2060      show that the subject has rights not denied by the
2061      Update operation, depending on the policy in force
2062      before the Update operation.
2064    - LDAP Update (Replace), LDAP Access Request
2066      The Request will succeed if it requires only rights
2067      granted to the requesting subject by the Update
2068      operation.  The Request will fail if it requires any
2069      right not granted by the Update operation.
2071    - LDAP Update (Grant), LDAP Access Request
2073      The Request will succeed if it requires only rights
2074      granted to the requesting subject by the Update
2075      operation.  The Request may succeed if it requires
2076      rights not granted by the Update operation, depending
2077      on the policy in force before the Update operation.
2079    - LDAP Update (Deny), LDAP Access Request
2081      The Request will fail if it requires any right denied
2082      to the requesting subject by the Update operation.  If
2083      the Request requires only rights which were not denied
2084      by the Update operation, it may succeed, depending on
2085      the policy in force before the Update operation.
2087    - LDAP Update (Replace), Other, LDAP Query
2089      The Query will show that the subject has all rights
2090      granted by the Update operation, and no rights not
2091      granted by the Update operation.
2093    - LDAP Update (Grant), Other, LDAP Query
2095      The Query will show that the subject has all rights
2096      granted by the Update operation.  The Query may show
2097      that the subject also has other rights not granted by
2098      the Update operation, depending on the policy in force
2099      before the Update operation.
2101    - LDAP Update (Deny), Other, LDAP Query
2103      The Query will show that the subject does not have any
2104      right denied by the Update operation.  The Query may
2105      show that the subject has rights not denied by the
2106      Update operation, depending on the policy in force
2110 Stokes, et al      Expires 14 January 2001         [Page 33]
2116 Internet-Draft      Access Control Model        14 July 2000
2120      before the Update operation.
2122    - LDAP Update (Replace), Other, LDAP Access Request
2124      The Request will succeed if it requires only rights
2125      granted to the requesting subject by the Update
2126      operation.  The Request will fail if it requires any
2127      right not granted by the Update operation.
2129    - LDAP Update (Grant), Other, LDAP Access Request
2131      The Request will succeed if it requires only rights
2132      granted to the requesting subject by the Update
2133      operation.  The Request may succeed if it requires
2134      rights not granted by the Update operation, depending
2135      on the policy in force before the Update operation.
2137    - LDAP Update (Deny), Other, LDAP Access Request
2139      The Request will fail if it requires any right denied
2140      to the requesting subject by the Update operation.  If
2141      the Request requires only rights which were not denied
2142      by the Update operation, it may succeed, depending on
2143      the policy in force before the Update operation.
2145    - LDAP Update (Replace), Datastore Policy Update, LDAP
2146      Query
2148      The result of the Query is not defined.
2150    - LDAP Update (Grant), Datastore Policy Update, LDAP
2151      Query
2153      The result of the Query is not defined.
2155    - LDAP Update (Deny), Datastore Policy Update, LDAP Query
2157      The result of the Query is not defined.
2159    - LDAP Update (Replace), Datastore Policy Update, LDAP
2160      Access Request
2162      The result of the Access Request is not defined.
2164    - LDAP Update (Grant), Datastore Policy Update, LDAP
2165      Access Request
2167      The result of the Access Request is not defined.
2169    - LDAP Update (Deny), Datastore Policy Update, LDAP
2170      Access Request
2174 Stokes, et al      Expires 14 January 2001         [Page 34]
2180 Internet-Draft      Access Control Model        14 July 2000
2184      The result of the Access Request is not defined.
2188 10.  Access Control Parameters for LDAP Controls & Extended
2189 Operations
2191 This section defines the parameters used in the access
2192 control LDAP controls and extended operations in this
2193 document.
2195 targetDN specifies the initial directory entry in DN syntax
2196 on which the control or extended operation is performed.
2198 whichObject specifies whether the access control information
2199 (in the get effective rights control) which is retrieved is
2200 for the target directory entry (ENTRY) or the target
2201 directory entry and its subtree (SUBTREE).
2203 rights in the get effective rights control or extended
2204 operation response is of the form specified in the BNF for
2205 <rights>.
2207 subject is a LDAP string that defines the subject.  Access
2208 control is get/set on a subject.  The syntax of the subject
2209 is the same as the subject field in the BNF.
2213 11.  Access Control Information (ACI) Controls
2215 The access control information controls provide a way to
2216 manipulate access control information in conjunction with a
2217 LDAP operation.  One LDAP control is defined.  This control
2218 allows access control information to be retrieved while
2219 manipulating other directory information for that entry.
2220 The control is:
2222    - getEffectiveRights to obtain the effective rights for a
2223      given directory entry(s) for a given subject during a
2224      ldap_search operation
2226 11.1  getEffectiveRights Control
2229 11.1.1  Request Control
2231 This control may only be included in the ldap_search
2232 message as  part of the controls  field  of the
2233 LDAPMessage, as  defined in  Section  4.1.12 of [LDAPv3].
2238 Stokes, et al      Expires 14 January 2001         [Page 35]
2244 Internet-Draft      Access Control Model        14 July 2000
2248 The controlType is set to <OID to be assigned>. The
2249 criticality MAY be either TRUE or FALSE (where absent is
2250 also equivalent to FALSE) at the client's option.  The
2251 controlValue is an OCTET STRING, whose value is the BER
2252 encoding of a value of the following SEQUENCE:
2254  getEffectiveRightsRequest ::= SEQUENCE {
2255    effectiveRightsRequest   SEQUENCE OF SEQUENCE {
2256        whichObject   ENUMERATED {
2257                      LDAP_ENTRY (1),
2258                      LDAP_SUBTREE (2)
2259                      },
2260        subject       <see <subject > in BNF> | "*"
2261        }
2264 The effectiveRightsRequest is a set of sequences that state
2265 the whichObject (entry or entry plus subtree) and specifics
2266 of the control request to be performed. A "*" in the subject
2267 field specifies that all DN types are to be used in
2268 returning the effective rights.  This control is applied to
2269 the filter and scope set by the ldap_search operation, i.e.
2270 base, one-level, subtree.  So the attributes/values returned
2271 are defined by the ldap_search operation.
2273 11.1.2  Response Control
2275 This control is included in the ldap_search_response message
2276 as part of the controls field of the LDAPMessage, as defined
2277 in Section 4.1.12 of [LDAPv3].
2279 The controlType is set to <OID to be assigned>. There is no
2280 need to set the criticality on the response.  The
2281 controlValue is an OCTET STRING, whose value is the BER
2282 encoding of a value of the following SEQUENCE:
2284  getEffectiveRightsResponse ::= {
2285    result  ENUMERATED {
2286       success                       (0),
2287       operationsError               (1),
2288       unavailableCriticalExtension (12),
2289       noSuchAttribute              (16),
2290       undefinedAttributeType       (17),
2291       invalidAttributeSyntax       (21),
2292       insufficientRights           (50),
2293       unavailable                  (52),
2294       unwillingToPerform           (53),
2295       other                        (80)
2296       }
2302 Stokes, et al      Expires 14 January 2001         [Page 36]
2308 Internet-Draft      Access Control Model        14 July 2000
2312 The effective rights returned are returned with each entry
2313 returned by the search result.  The control response for
2314 ldap_search is:
2316  PartialEffectiveRightsList ::= SEQUENCE OF SEQUENCE {
2317     rights        <see <rights> in BNF>,
2318     whichObject   ENUMERATED {
2319                       LDAP_ENTRY (1),
2320                       LDAP_SUBTREE (2)
2321                       },
2322     subject       < see <subject> in BNF >
2325 Although this extends the search operation, there are no
2326 incompatibilities between versions.  LDAPv2 cannot send a
2327 control, hence the above structure cannot be returned to a
2328 LDAPv2 client.  A LDAPv3 client cannot send this request to
2329 a LDAPv2 server.  A LDAPv3 server not supporting this
2330 control cannot return the additional data.
2332 11.1.3  Client-Server Interaction
2334 The getEffectiveRightsRequest control requests the rights
2335 that MUST be in effect for requested directory
2336 entry/attribute based on the subject DN.  The server that
2337 consumes the search operation looks up the rights for the
2338 returned directory information based on the subject DN and
2339 returns that rights information.
2341 There are six possible scenarios that may occur as a result
2342 of the getEffectiveRights control being included on the
2343 search request:
2346   1.  If the server does not support this control and the
2347       client specified TRUE for the control's criticality
2348       field, then the server MUST return
2349       unavailableCriticalExtension as a return code in the
2350       searchResponse message and not send back any other
2351       results.  This behavior is specified in section 4.1.12
2352       of [LDAPv3].
2354   2.  If the server does not support this control and the
2355       client specified FALSE for the control's criticality
2356       field, then the server MUST ignore the control and
2357       process the request as if it were not present.  This
2358       behavior is specified in section 4.1.12 of [LDAPv3].
2360   3.  If the server supports this control but for some
2361       reason such as cannot process specified family and the
2362       client specified TRUE for the control's criticality
2366 Stokes, et al      Expires 14 January 2001         [Page 37]
2372 Internet-Draft      Access Control Model        14 July 2000
2376       field, then the server SHOULD do the following: return
2377       unavailableCriticalExtension as a return code in the
2378       searchResult message.
2380   4.  If the server supports this control but for some
2381       reason such as cannot process specified family and the
2382       client specified FALSE for the control's criticality
2383       field, then the server should process as 'no rights
2384       returned for that family' and include the result
2385       Unavailable in the getEffectiveRightsResponse control
2386       in the searchResult message.
2388   5.  If the server supports this control and can return the
2389       rights per the family information, then it should
2390       include the getEffectiveRightsResponse control in the
2391       searchResult message with a result of success.
2393   6.  If the search request failed for any other reason,
2394       then the server SHOULD omit the
2395       getEffectiveRightsResponse control from the
2396       searchResult message.
2398 The client application is assured that the correct rights
2399 are returned for scope of the search operation if and only
2400 if the getEffectiveRightsResponse control returns the
2401 rights.  If the server omits the getEffectiveRightsResponse
2402 control from the searchResult message, the client SHOULD
2403 assume that the control was ignored by the server.
2405 The getEffectiveRightsResponse control, if included by the
2406 server in the searchResponse message, should have the
2407 getEffectiveRightsResult set to either success if the rights
2408 are returned or set to the appropriate error code as to why
2409 the rights could not be returned.
2411 The server may not be able to return a right because it may
2412 not exist in that directory object's attribute; in this
2413 case, the rights request is ignored with success.
2416 12.  Access Control Extended Operation
2418 An extended operation, get effective rights, is defined to
2419 obtain the effective rights for a given directory entry for
2420 a given subject.  This operation may help with the
2421 management of access control information independent of
2422 manipulating other directory information.
2430 Stokes, et al      Expires 14 January 2001         [Page 38]
2436 Internet-Draft      Access Control Model        14 July 2000
2440 12.1  LDAP Get Effective Rights Operation
2442 ldapGetEffectiveRightsRequest ::= [APPLICATION 23] SEQUENCE
2444    requestName      [0] <OID to be assigned>,
2445    requestValue     [1] OCTET STRING OPTIONAL }
2447    where
2449    requestValue ::= SEQUENCE {
2450       targetDN  LDAPDN,
2451       updates   SEQUENCE OF SEQUENCE {
2452                   whichObject   ENUMERATED {
2453                                   LDAP_ENTRY (1),
2454                                   LDAP_SUBTREE (2)
2455                                   },
2456                   attr SEQUENCE {
2457                      attr   <see <attr> in BNF >
2458                      },
2459                   subject   < see <subject> in BNF > | "*"
2460                   }
2461       }
2464 The requestName is a dotted-decimal representation of the
2465 OBJECT IDENTIFIER corresponding to the request. The
2466 requestValue is information in a form defined by that
2467 request, encapsulated inside an OCTET STRING.
2469 The server will respond to this with an LDAPMessage
2470 containing the ExtendedResponse which is a rights list.
2472 ldapGetEffectiveRightsResponse ::= [APPLICATION 24] SEQUENCE
2474    COMPONENTS OF LDAPResult,
2475    responseName     [10] <OID to be assigned> OPTIONAL,
2476    effectiveRights  [11] OCTET STRING OPTIONAL }
2478    where
2480    effectiveRights ::= SEQUENCE OF SEQUENCE {
2481       rights        <see <rights> in BNF>,
2482       whichObject   ENUMERATED {
2483                        LDAP_ENTRY (1),
2484                        LDAP_SUBTREE (2)
2485                        },
2486       subject       < see <subject> in BNF >
2487    }
2489 If the server does not recognize the request name, it MUST
2490 return only the response fields from LDAPResult, containing
2494 Stokes, et al      Expires 14 January 2001         [Page 39]
2500 Internet-Draft      Access Control Model        14 July 2000
2504 the protocolError result code.
2508 13.  Security Considerations
2510 This document proposes protocol elements for transmission of
2511 security policy information.  Security considerations are
2512 discussed throughout this draft.  Because subject security
2513 attribute information is used to evaluate decision requests,
2514 it is security-sensitive information and must be protected
2515 against unauthorized modification whenever it is stored or
2516 transmitted.
2518 Interaction of access control with other directory functions
2519 (other than the ones defined in this document) are not
2520 defined in this document, but instead in the documents where
2521 those directory functions are defined.  For example, the
2522 directory replication documents should address the
2523 interaction of access control with the replication function.
2527 14.  References
2529 [LDAPv3] M. Wahl, T. Howes, S. Kille, "Lightweight Directory
2530 Access Protocol (v3)", RFC 2251, December 1997.
2532 [ECMA] ECMA, "Security in Open Systems: A Security
2533 Framework" ECMA TR/46, July 1988.
2535 [REQTS] Stokes, Byrne, Blakley, "Access Control Requirements
2536 for LDAP", RFC 2820, May 2000.
2538 [ATTR] M.Wahl, A, Coulbeck, T. Howes, S. Kille, "Lightweight
2539 Directory Access Protocol (v3)": Attribute Syntax
2540 Definitions, RFC 2252, December 1997.
2542 [UTF] M. Wahl, S. Kille, "Lightweight Directory Access
2543 Protocol (v3)": A UTF-8 String Representation of
2544 Distinguished Names", RFC 2253, December 1997.
2546 [Bradner97] Bradner, Scott, "Key Words for use in RFCs to
2547 Indicate Requirement Levels", RFC 2119.
2549 [AuthMeth] Wahl, M., Alvestrand, H., Hodges, J. and R.
2550 Morgan, "Authentication Methods for LDAP", RFC 2829, May
2551 2000.
2553 [ABNF] D. Crocker, P. Overell, "Augmented BNF for Syntax
2554 Specifications: ABNF", RFC 2234, November 1997.
2558 Stokes, et al      Expires 14 January 2001         [Page 40]
2564 Internet-Draft      Access Control Model        14 July 2000
2568 ACKNOWLEDGEMENT
2570 This is to acknowledge the numerous companies and individuals who have
2571 contributed their valuable help and insights to the development of this
2572 specification.
2575 AUTHOR(S) ADDRESS
2577  Ellen Stokes                       Bob Blakley
2578  Tivoli Systems                     Tivoli Systems
2579  6300 Bridgepoint Parkway           6300 Bridgepoint Parkway
2580  Austin, TX 78731                   Austin, TX 78731
2581  USA                                USA
2582  mail-to: estokes@tivoli.com        mail-to: blakley@tivoli.com
2583  phone: +1 512 436 9098             phone: +1 512 436 1564
2584  fax:   +1 512 436 1199             fax:   +1 512 436 1199
2587  Debbie Rinkevich                   Robert Byrne
2588  IBM                                Sun Microsystems
2589  11400 Burnet Rd                    29 Chemin du Vieux Chene
2590  Austin, TX 78758                   Meylan ZIRST 38240
2591  USA                                France
2592  mail-to: djbrink@us.ibm.com        mail-to: rbyrne@france.sun.com
2593  phone: +1 512 838 1960             phone: +33 (0)4 76 41 42 05
2594  fax:   +1 512 838 8597
2622 Stokes, et al      Expires 14 January 2001         [Page 41]
2628 Internet-Draft      Access Control Model        14 July 2000
2686 Stokes, et al      Expires 14 January 2001         [Page 42]
2696                           CONTENTS
2699  1.  Introduction.......................................   2
2701  2.  The LDAPv3 Access Control Model....................   2
2703  3.  Access Control Mechanism Attributes................   5
2704      3.1   Root DSE Attribute for Access Control
2705            Mechanism....................................   5
2706      3.2   Root DSE Attribute for Control of Disclosing
2707            Errors.......................................   5
2708      3.3   Subentry Class Access Control Mechanism......   6
2710  4.  The Access Control Information Attribute
2711      (ldapACI)..........................................   7
2712      4.1   The BNF......................................   8
2713            4.1.1   ACI String Representation   8
2714            4.1.2   ACI Binary Representation  10
2715      4.2   The Components of ldapACI Attribute..........  11
2716            4.2.1   Scope  11
2717            4.2.2   Access Rights and Permissions  11
2718            4.2.3   Attributes  14
2719            4.2.4   Subjects and Associated
2720                    Authentication  15
2721      4.3   Grant/Deny Evaluation Rules..................  15
2723  5.  Required Permissions for each LDAP Operation.......  17
2724      5.1   Bind Operation...............................  18
2725      5.2   Search Operation.............................  18
2726      5.3   Modify Operation.............................  21
2727      5.4   Add Operation................................  22
2728      5.5   Delete Operation.............................  23
2729      5.6   Modify DN Operation..........................  23
2730      5.7   Compare Operation............................  24
2731      5.8   Abandon Operation............................  25
2732      5.9   Extended Operation...........................  25
2734  6.  Required Permissions for Handling Aliases and
2735      References.........................................  25
2736      6.1   ACI Distribution.............................  25
2737      6.2   Aliases......................................  26
2738      6.3   Referrals....................................  26
2740  7.  Controlling Access to Access Control
2741      Information........................................  27
2743  8.  ACI Examples.......................................  27
2744      8.1   Attribute Definition.........................  27
2745      8.2   Modifying the ldapACI Values.................  28
2746      8.3   Evaluation...................................  30
2750                            - i -
2762  9.  Operational Semantics of Access Control
2763      Operations.........................................  31
2764      9.1   Types of actions.............................  32
2765      9.2   Semantics of Histories.......................  32
2767 10.  Access Control Parameters for LDAP Controls &
2768      Extended Operations................................  35
2770 11.  Access Control Information (ACI) Controls..........  35
2771      11.1  getEffectiveRights Control...................  35
2772            11.1.1  Request Control  35
2773            11.1.2  Response Control  36
2774            11.1.3  Client-Server Interaction  37
2776 12.  Access Control Extended Operation..................  38
2777      12.1  LDAP Get Effective Rights Operation..........  39
2779 13.  Security Considerations............................  40
2781 14.  References.........................................  40
2816                            - ii -
2828 Full Copyright Statement
2830 Copyright (C) The Internet Society (2000).á All Rights
2831 Reserved.
2833 This document and translations of it may be copied and
2834 furnished to others, and derivative works that comment on or
2835 otherwise explain it or assist in its implementation may be
2836 prepared, copied, published and distributed, in whole or in
2837 part, without restriction of any kind, provided that the
2838 above copyright notice and this paragraph are included on
2839 all such copies and derivative works.á However, this
2840 document itself may not be modified in any way, such as by
2841 removing the copyright notice or references to the Internet
2842 Society or other Internet organizations, except as needed
2843 for the purpose of developing Internet standards in which
2844 case the procedures for copyrights defined in the Internet
2845 Standards process must be followed, or as required to
2846 translate it into languages other than English.
2848 The limited permissions granted above are perpetual and will
2849 not be revoked by the Internet Society or its successors or
2850 assigns.
2852 This document and the information contained herein is
2853 provided on an "AS IS" basis and THE INTERNET SOCIETY AND
2854 THE INTERNET ENGINEERING TASK FORCE DISCLAIMS ALL
2855 WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO
2856 ANY WARRANTY THAT THE USE OF THE INFORMATION HEREIN WILL NOT
2857 INFRINGE ANY RIGHTS OR ANY IMPLIED WARRANTIES OF
2858 MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
2882                           - iii -